This commit is contained in:
Wojciech Lidwin 2023-05-12 03:20:45 +02:00
parent 4686b93132
commit 63159ed8bf

122
ium_sacred.py Normal file
View File

@ -0,0 +1,122 @@
from keras.models import Sequential, load_model
from keras.layers import Dense
from keras.optimizers import Adam
import pandas as pd
import tensorflow as tf
import numpy as np
from sklearn.preprocessing import LabelEncoder
import argparse
import shutil
from sacred.observers import FileStorageObserver, MongoObserver
from sacred import Experiment
from sklearn import metrics
import math
ex = Experiment('s487197-train', save_git_info=False,interactive=True)
ex.observers.append(FileStorageObserver('sacred_results'))
ex.observers.append(MongoObserver(url='mongodb://admin:IUM_2021@172.17.0.1:27017', db_name='sacred'))
#ex.observers.append(MongoObserver(url='mongodb://admin:IUM_2021@172.17.0.1:27017', db_name='sacred'))
def write_list(names):
with open('listfile.txt', 'w') as fp:
fp.write("\n".join(str(item) for item in names))
def get_x_y(data):
lb = LabelEncoder()
data = data.drop(["Location 1"], axis=1)
data = data.drop(
columns=["Longitude", "Latitude", "Location", "Total Incidents", "CrimeTime", "Neighborhood", "Post",
"CrimeDate", "Inside/Outside"], axis=1)
for column_name in data.columns:
data[column_name] = lb.fit_transform(data[column_name])
x = data.drop('Weapon', axis=1)
y = data['Weapon']
return data, x, y
@ex.config
def my_config():
epochs = 20
lr = 0.01
validation_split = 0.2
#parser = argparse.ArgumentParser(description='Train')
# parser.add_argument('-epochs', type=int, default=20)
# parser.add_argument('-lr', type=float, default=0.01)
#parser.add_argument('-validation_split', type=float, default=0.2)
#args = parser.parse_args()
# epochs = args.epochs
# lr = args.lr
# validation_split = args.validation_split
@ex.main
def predict(epochs, lr, validation_split):
print("ble")
model = load_model('baltimore_model')
train = pd.read_csv('baltimore_train.csv')
baltimore_data_test =pd.read_csv('baltimore_test.csv')
baltimore_data_test.columns = train.columns
baltimore_data_test, x_test, y_test = get_x_y(baltimore_data_test)
scores = model.evaluate(x_test, y_test)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1] * 100))
y_predicted = model.predict(x_test)
y_predicted = np.argmax(y_predicted, axis=1)
test_results = {}
test_results['Weapon'] = model.evaluate(
x_test,
y_test, verbose=0)
write_list(y_predicted)
print('Accuracy : ', scores[1] * 100)
print('Mean Absolute Error : ', metrics.mean_absolute_error(y_test, y_predicted))
print('Root Mean Squared Error : ', math.sqrt(metrics.mean_squared_error(y_test, y_predicted)))
data = {
'mse': metrics.mean_squared_error(y_test, y_predicted),
'rmse': math.sqrt(metrics.mean_squared_error(y_test, y_predicted)),
'accuracy': scores[1] * 100
}
ex.log_scalar('accuracy', data['accuracy'])
ex.log_scalar('rmse', data['rmse'])
ex.log_scalar('accuracy', data['accuracy'])
ex.add_artifact('baltimore_model')
@ex.capture
def train_model(epochs, lr, validation_split):
train = pd.read_csv('baltimore_train.csv')
data_train, x_train, y_train = get_x_y(train)
normalizer = tf.keras.layers.Normalization(axis=1)
normalizer.adapt(np.array(x_train))
model = Sequential(normalizer)
model.add(Dense(64, activation="relu"))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(5, activation="softmax"))
model.compile(Adam(learning_rate=lr), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.summary()
history = model.fit(
x_train,
y_train,
epochs=epochs,
validation_split=validation_split)
hist = pd.DataFrame(history.history)
hist['epoch'] = history.epoch
model.save('baltimore_model')
shutil.make_archive('baltimore', 'zip', 'baltimore_model')
ex.run()