ium_464962/sacred_model.py

55 lines
1.6 KiB
Python

from sacred import Experiment
from sacred.observers import FileStorageObserver, MongoObserver
import pandas as pd
import numpy as np
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
from sklearn.preprocessing import MinMaxScaler
ex = Experiment("464962")
ex.observers.append(MongoObserver(url='mongodb://admin:IUM_2021@172.17.0.1:27017', db_name='sacred'))
ex.observers.append(FileStorageObserver('my_runs'))
@ex.config
def my_config():
data_path = './data/car_prices_train.csv'
epochs = 20
batch_size = 32
model_path = './car_prices_predict_model.h5'
@ex.main
def train_model(data_path, epochs, batch_size, model_path, _run):
train_data = pd.read_csv(data_path)
train_data.dropna(inplace=True)
y_train = train_data['sellingprice'].astype(np.float32)
X_train = train_data[['year', 'condition', 'transmission']]
scaler_x = MinMaxScaler()
X_train['condition'] = scaler_x.fit_transform(X_train[['condition']])
scaler_y = MinMaxScaler()
y_train = scaler_y.fit_transform(y_train.values.reshape(-1, 1))
X_train = pd.get_dummies(X_train, columns=['transmission'])
model = Sequential([
Dense(64, activation='relu'),
Dense(32, activation='relu'),
Dense(1)
])
model.compile(optimizer='adam', loss='mean_squared_error')
model.summary(print_fn=lambda x: _run.info.setdefault('model_summary', []).append(x))
history = model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size)
for epoch, loss in enumerate(history.history['loss']):
_run.log_scalar("loss", loss, epoch)
model.save(model_path)
if __name__ == "__main__":
ex.run()