IUM_s464980/train_sacred.py
Sheaza 030217be1d
Some checks failed
s464980-training/pipeline/head There was a failure building this commit
sacred fix 2
2024-06-09 18:12:37 +02:00

73 lines
2.4 KiB
Python

import pandas as pd
from tensorflow import keras
from tensorflow.keras import layers
import argparse
from sacred import Experiment
from sacred.observers import FileStorageObserver, MongoObserver
ex = Experiment("464980", interactive=True, save_git_info=False)
ex.observers.append(FileStorageObserver('./experiments'))
ex.observers.append(MongoObserver(url='mongodb://admin:IUM_2021@tzietkiewicz.vm.wmi.amu.edu.pl:27017',
db_name='sacred'))
@ex.capture
def capture_params(epochs):
print(f"epochs: {epochs}")
class RegressionModel:
def __init__(self, optimizer="adam", loss="mean_squared_error"):
self.model = keras.Sequential([
layers.Input(shape=(5,)), # Input layer
layers.Dense(32, activation='relu'), # Hidden layer with 32 neurons and ReLU activation
layers.Dense(1) # Output layer with a single neuron (for regression)
])
self.optimizer = optimizer
self.loss = loss
self.X_train = None
self.X_test = None
self.y_train = None
self.y_test = None
def load_data(self, train_path, test_path):
data_train = pd.read_csv(train_path)
data_test = pd.read_csv(test_path)
self.X_train = data_train.drop("Performance Index", axis=1)
self.y_train = data_train["Performance Index"]
self.X_test = data_test.drop("Performance Index", axis=1)
self.y_test = data_test["Performance Index"]
def train(self, epochs=30):
self.model.compile(optimizer=self.optimizer, loss=self.loss)
self.model.fit(self.X_train, self.y_train, epochs=epochs, batch_size=32, validation_data=(self.X_test, self.y_test))
capture_params(epochs)
def predict(self, data):
prediction = self.model.predict(data)
return prediction
def evaluate(self):
test_loss = self.model.evaluate(self.X_test, self.y_test)
print(f"Test Loss: {test_loss:.4f}")
return test_loss
def save_model(self):
self.model.save("model.keras")
ex.add_artifact("model.keras", content_type="application/octet-stream")
@ex.main
def main(_run):
parser = argparse.ArgumentParser()
parser.add_argument('--epochs')
args = parser.parse_args()
model = RegressionModel()
model.load_data("df_train.csv", "df_test.csv")
model.train(epochs=int(args.epochs))
_run.log_scalar("testing.mean_square_error", model.evaluate())
model.save_model()
ex.run()