From 63159ed8bf6fafc44fe3a97d5a58fcc359cbc278 Mon Sep 17 00:00:00 2001 From: Wojciech Lidwin <59863785+Halal37@users.noreply.github.com> Date: Fri, 12 May 2023 03:20:45 +0200 Subject: [PATCH] XD --- ium_sacred.py | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 ium_sacred.py diff --git a/ium_sacred.py b/ium_sacred.py new file mode 100644 index 0000000..22120b9 --- /dev/null +++ b/ium_sacred.py @@ -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() +