ium_434788/Zadanie_06_and_07_training.py
Dominik Strzako 1dd2bba636 mlproject
2021-05-16 11:47:17 +02:00

88 lines
2.6 KiB
Python

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")