ium_487197/ium_sacred.py

123 lines
3.9 KiB
Python
Raw Normal View History

2023-05-12 03:20:45 +02:00
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()