from tensorflow.keras.models import Sequential, load_model from tensorflow.keras.layers import Dense from sklearn.metrics import accuracy_score, classification_report import pandas as pd from sklearn.model_selection import train_test_split import numpy as np import sys from sklearn.preprocessing import StandardScaler, LabelEncoder from tensorflow.keras.optimizers import Adam from sacred.observers import FileStorageObserver, MongoObserver from sacred import Experiment from datetime import datetime import os import pymongo ex = Experiment("434788-mongo", interactive=False, save_git_info=False) ex.observers.append(MongoObserver(url='mongodb://mongo_user:mongo_password_IUM_2021@172.17.0.1:27017', db_name='sacred')) ex.observers.append(FileStorageObserver('my_runs')) @ex.config def my_config(): batch_param = int(sys.argv[1]) epoch_param = int(sys.argv[2]) @ex.capture def prepare_model(epoch_param, batch_param, _run): _run.info["prepare_model_ts"] = str(datetime.now()) wine=pd.read_csv('train.csv') y = wine['quality'] x = wine.drop('quality', axis=1) citricacid = x['fixed acidity'] * x['citric acid'] citric_acidity = pd.DataFrame(citricacid, columns=['citric_accidity']) density_acidity = x['fixed acidity'] * x['density'] density_acidity = pd.DataFrame(density_acidity, columns=['density_acidity']) x = wine.join(citric_acidity).join(density_acidity) bins = (2, 5, 8) gnames = ['bad', 'nice'] y = pd.cut(y, bins = bins, labels = gnames) enc = LabelEncoder() yenc = enc.fit_transform(y) scale = StandardScaler() scaled_x = scale.fit_transform(x) NeuralModel = Sequential([ Dense(128, activation='relu', input_shape=(14,)), Dense(32, activation='relu'), Dense(64, activation='relu'), Dense(64, activation='relu'), Dense(64, activation='relu'), Dense(1, activation='sigmoid') ]) rms = Adam(lr=0.0003) NeuralModel.compile(optimizer=rms, loss='binary_crossentropy', metrics=['accuracy']) NeuralModel.fit(scaled_x, yenc, batch_size= batch_param, epochs = epoch_param) #verbose = 1 NeuralModel.save('wine_model.h5') #TO TYLKO NA POTRZEBY ZADANIA y_pred = NeuralModel.predict(scaled_x) y_pred = np.around(y_pred, decimals=0) results = accuracy_score(yenc,y_pred) _run.info["Accuracy dla zbioru TRAIN (bez sensu) (tylko na potrzeby zadania)"] = str(results) @ex.main def my_main(epoch_param, batch_param): print(prepare_model()) r = ex.run() ex.add_artifact("wine_model.h5")