ium_434742/sacred-mongoobserver.py

72 lines
2.3 KiB
Python
Raw Normal View History

2021-05-14 20:48:13 +02:00
import sys
from keras.backend import mean
import pandas as pd
import numpy as np
from sklearn import preprocessing
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import Input, Dense, Activation,Dropout
from tensorflow.keras.models import Model
from tensorflow.keras.callbacks import EarlyStopping
from keras.models import Sequential
from sacred import Experiment
2021-05-15 12:02:10 +02:00
from sacred.observers import MongoObserver
2021-05-14 20:48:13 +02:00
2021-05-15 12:40:13 +02:00
ex = Experiment("434742-mongo", interactive=False, save_git_info=False)
2021-05-15 12:02:10 +02:00
ex.observers.append(MongoObserver(url='mongodb://mongo_user:mongo_password_IUM_2021@172.17.0.1:27017', db_name='sacred'))
2021-05-14 20:48:13 +02:00
@ex.config
def my_config():
epochs = 10
batch_size = 16
@ex.capture
2021-05-15 15:33:14 +02:00
def prepare_model(epochs, batch_size, _run):
2021-05-14 20:48:13 +02:00
# odczytanie danych z plików
avocado_train = pd.read_csv('avocado_train.csv')
avocado_test = pd.read_csv('avocado_test.csv')
avocado_validate = pd.read_csv('avocado_validate.csv')
# podzial na X i y
X_train = avocado_train[['average_price', 'total_volume', '4046', '4225', '4770', 'total_bags', 'small_bags', 'large_bags', 'xlarge_bags']]
y_train = avocado_train[['type']]
X_test = avocado_test[['average_price', 'total_volume', '4046', '4225', '4770', 'total_bags', 'small_bags', 'large_bags', 'xlarge_bags']]
y_test = avocado_test[['type']]
print(X_train.shape[1])
# keras model
model = Sequential()
model.add(Dense(9, input_dim = X_train.shape[1], kernel_initializer='normal', activation='relu'))
model.add(Dense(1,kernel_initializer='normal', activation='sigmoid'))
early_stop = EarlyStopping(monitor="val_loss", mode="min", verbose=1, patience=10)
# kompilacja
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# trenowanie modelu
model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, validation_data=(X_test, y_test))
# predykcja
prediction = model.predict(X_test)
# ewaluacja
rmse = mean_squared_error(y_test, prediction)
2021-05-15 15:33:14 +02:00
_run.log_scalar("rmse", rmse)
2021-05-14 20:48:13 +02:00
# zapisanie modelu
model.save('avocado_model.h5')
return rmse
2021-05-15 12:02:10 +02:00
@ex.automain
def my_main(epochs, batch_size):
2021-05-14 20:48:13 +02:00
print(prepare_model())
ex.run()
ex.add_artifact('avocado_model.h5')