diff --git a/Dockerfile b/Dockerfile index 9d1f34b..013ba47 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,6 +17,7 @@ COPY ./skrypt_stat.py ./ COPY ./IUM_05.py ./ COPY ./training.py ./ COPY ./mongoObserver.py ./ +COPY ./fileObserver.py ./ RUN mkdir /.kaggle RUN chmod -R 777 /.kaggle diff --git a/fileObserver.py b/fileObserver.py new file mode 100644 index 0000000..dfc0fcf --- /dev/null +++ b/fileObserver.py @@ -0,0 +1,86 @@ +import torch +from torch import nn +import numpy as np +import pandas as pd +from sklearn.metrics import accuracy_score +from sklearn.metrics import f1_score +from sacred import Experiment +from sacred.observers import FileStorageObserver + +np.set_printoptions(suppress=False) + +ex = Experiment("434732", interactive=False, save_git_info=False) +ex.observers.append(FileStorageObserver('ium_s434732/my_runs')) + +@ex.config +def my_config(): + epochs = 5 + batch_size = 10 + +class LogisticRegressionModel(nn.Module): + def __init__(self, input_dim, output_dim): + super(LogisticRegressionModel, self).__init__() + self.linear = nn.Linear(input_dim, output_dim) + self.sigmoid = nn.Sigmoid() + def forward(self, x): + out = self.linear(x) + return self.sigmoid(out) + + +@ex.capture +def readAndtrain(epochs, batch_size, _run): + train = pd.read_csv("train.csv") + test = pd.read_csv("test.csv") + + xtrain = train[['age','anaemia','creatinine_phosphokinase','diabetes', 'ejection_fraction', 'high_blood_pressure', 'platelets', 'serum_creatinine', 'serum_sodium', 'sex', 'smoking']].astype(np.float32) + ytrain = train['DEATH_EVENT'].astype(np.float32) + xtest = test[['age','anaemia','creatinine_phosphokinase','diabetes', 'ejection_fraction', 'high_blood_pressure', 'platelets', 'serum_creatinine', 'serum_sodium', 'sex', 'smoking']].astype(np.float32) + ytest = test['DEATH_EVENT'].astype(np.float32) + xTrain = torch.from_numpy(xtrain.values) + yTrain = torch.from_numpy(ytrain.values.reshape(179,1)) + xTest = torch.from_numpy(xtest.values) + yTest = torch.from_numpy(ytest.values) + + learning_rate = 0.002 + input_dim = 11 + output_dim = 1 + + _run.log_scalar("Batch", str(batch_size)) + _run.log_scalar("epoch", str(epochs)) + + model = LogisticRegressionModel(input_dim, output_dim) + model.load_state_dict(torch.load('DEATH_EVENT.pth')) + + criterion = torch.nn.BCELoss(reduction='mean') + optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate) + + for epoch in range(epochs): + # print ("Epoch #",epoch) + model.train() + optimizer.zero_grad() + # Forward pass + y_pred = model(xTrain) + # Compute Loss + loss = criterion(y_pred, yTrain) + # print(loss.item()) + # Backward pass + loss.backward() + optimizer.step() + + _run.log_scalar("Lost", str(loss.item())) + + + torch.save(model.state_dict(), 'DEATH_EVENT.pth') + prediction= model(xTest) + _run.log_scalar("accuracy_score", accuracy_score(yTest, np.argmax(prediction.detach().numpy(), axis=1))) + # _run.log_scalar("F1", str(f1_score(yTest, np.argmax(prediction.detach().numpy(), axis=1), average=None))) + + print("accuracy_score", accuracy_score(yTest, np.argmax(prediction.detach().numpy(), axis=1))) + # print("F1", f1_score(yTest, np.argmax(prediction.detach().numpy(), axis=1), average=None)) + +@ex.automain +def my_main(epochs, batch_size, _run): + readAndtrain() + +ex.run() +ex.add_artifact('DEATH_EVENT.pth') \ No newline at end of file