diff --git a/sacred/sacred_runs/2/beer_review_sentiment_model.keras b/sacred/sacred_runs/2/beer_review_sentiment_model.keras new file mode 100644 index 0000000..8a42518 Binary files /dev/null and b/sacred/sacred_runs/2/beer_review_sentiment_model.keras differ diff --git a/sacred/sacred_runs/2/config.json b/sacred/sacred_runs/2/config.json new file mode 100644 index 0000000..54a3b26 --- /dev/null +++ b/sacred/sacred_runs/2/config.json @@ -0,0 +1,5 @@ +{ + "batch_size": 32, + "epochs": 10, + "seed": 541882551 +} \ No newline at end of file diff --git a/sacred/sacred_runs/2/cout.txt b/sacred/sacred_runs/2/cout.txt new file mode 100644 index 0000000..67e700b --- /dev/null +++ b/sacred/sacred_runs/2/cout.txt @@ -0,0 +1,26 @@ +Epoch 1/10 + 1/1 [==============================] - ETA: 0s - loss: 0.6484 - accuracy: 0.0000e+00 1/1 [==============================] - 1s 977ms/step - loss: 0.6484 - accuracy: 0.0000e+00 - val_loss: 0.6273 - val_accuracy: 0.0000e+00 +Epoch 2/10 + 1/1 [==============================] - ETA: 0s - loss: 0.6358 - accuracy: 0.0000e+00 1/1 [==============================] - 0s 23ms/step - loss: 0.6358 - accuracy: 0.0000e+00 - val_loss: 0.6127 - val_accuracy: 0.0000e+00 +Epoch 3/10 + 1/1 [==============================] - ETA: 0s - loss: 0.6232 - accuracy: 0.0000e+00 1/1 [==============================] - 0s 23ms/step - loss: 0.6232 - accuracy: 0.0000e+00 - val_loss: 0.5979 - val_accuracy: 0.0000e+00 +Epoch 4/10 + 1/1 [==============================] - ETA: 0s - loss: 0.6104 - accuracy: 0.0000e+00 1/1 [==============================] - 0s 23ms/step - loss: 0.6104 - accuracy: 0.0000e+00 - val_loss: 0.5830 - val_accuracy: 0.0000e+00 +Epoch 5/10 + 1/1 [==============================] - ETA: 0s - loss: 0.5977 - accuracy: 0.0000e+00 1/1 [==============================] - 0s 23ms/step - loss: 0.5977 - accuracy: 0.0000e+00 - val_loss: 0.5683 - val_accuracy: 0.0000e+00 +Epoch 6/10 + 1/1 [==============================] - ETA: 0s - loss: 0.5849 - accuracy: 0.0000e+00 1/1 [==============================] - 0s 21ms/step - loss: 0.5849 - accuracy: 0.0000e+00 - val_loss: 0.5534 - val_accuracy: 0.0000e+00 +Epoch 7/10 + 1/1 [==============================] - ETA: 0s - loss: 0.5721 - accuracy: 0.0000e+00 1/1 [==============================] - 0s 23ms/step - loss: 0.5721 - accuracy: 0.0000e+00 - val_loss: 0.5384 - val_accuracy: 0.0000e+00 +Epoch 8/10 + 1/1 [==============================] - ETA: 0s - loss: 0.5593 - accuracy: 0.0000e+00 1/1 [==============================] - 0s 23ms/step - loss: 0.5593 - accuracy: 0.0000e+00 - val_loss: 0.5238 - val_accuracy: 0.0000e+00 +Epoch 9/10 + 1/1 [==============================] - ETA: 0s - loss: 0.5472 - accuracy: 0.0000e+00 1/1 [==============================] - 0s 22ms/step - loss: 0.5472 - accuracy: 0.0000e+00 - val_loss: 0.5110 - val_accuracy: 0.0000e+00 +Epoch 10/10 + 1/1 [==============================] - ETA: 0s - loss: 0.5361 - accuracy: 0.0000e+00 1/1 [==============================] - 0s 22ms/step - loss: 0.5361 - accuracy: 0.0000e+00 - val_loss: 0.4980 - val_accuracy: 0.0000e+00 + 1/5078 [..............................] - ETA: 6:29 67/5078 [..............................] - ETA: 3s  139/5078 [..............................] - ETA: 3s 215/5078 [>.............................] - ETA: 3s 291/5078 [>.............................] - ETA: 3s 361/5078 [=>............................] - ETA: 3s 436/5078 [=>............................] - ETA: 3s 511/5078 [==>...........................] - ETA: 3s 584/5078 [==>...........................] - ETA: 3s 655/5078 [==>...........................] - ETA: 3s 730/5078 [===>..........................] - ETA: 3s 803/5078 [===>..........................] - ETA: 2s 881/5078 [====>.........................] - ETA: 2s 952/5078 [====>.........................] - ETA: 2s 1026/5078 [=====>........................] - ETA: 2s 1102/5078 [=====>........................] - ETA: 2s 1177/5078 [=====>........................] - ETA: 2s 1250/5078 [======>.......................] - ETA: 2s 1326/5078 [======>.......................] - ETA: 2s 1398/5078 [=======>......................] - ETA: 2s 1472/5078 [=======>......................] - ETA: 2s 1548/5078 [========>.....................] - ETA: 2s 1618/5078 [========>.....................] - ETA: 2s 1688/5078 [========>.....................] - ETA: 2s 1760/5078 [=========>....................] - ETA: 2s 1831/5078 [=========>....................] - ETA: 2s 1906/5078 [==========>...................] - ETA: 2s 1982/5078 [==========>...................] - ETA: 2s 2061/5078 [===========>..................] - ETA: 2s 2138/5078 [===========>..................] - ETA: 2s 2211/5078 [============>.................] - ETA: 1s 2284/5078 [============>.................] - ETA: 1s 2359/5078 [============>.................] - ETA: 1s 2437/5078 [=============>................] - ETA: 1s 2514/5078 [=============>................] - ETA: 1s 2592/5078 [==============>...............] - ETA: 1s 2668/5078 [==============>...............] - ETA: 1s 2745/5078 [===============>..............] - ETA: 1s 2819/5078 [===============>..............] - ETA: 1s 2897/5078 [================>.............] - ETA: 1s 2974/5078 [================>.............] - ETA: 1s 3051/5078 [=================>............] - ETA: 1s 3128/5078 [=================>............] - ETA: 1s 3202/5078 [=================>............] - ETA: 1s 3279/5078 [==================>...........] - ETA: 1s 3351/5078 [==================>...........] - ETA: 1s 3425/5078 [===================>..........] - ETA: 1s 3497/5078 [===================>..........] - ETA: 1s 3575/5078 [====================>.........] - ETA: 1s 3652/5078 [====================>.........] - ETA: 0s 3726/5078 [=====================>........] - ETA: 0s 3800/5078 [=====================>........] - ETA: 0s 3875/5078 [=====================>........] - ETA: 0s 3952/5078 [======================>.......] - ETA: 0s 4029/5078 [======================>.......] - ETA: 0s 4105/5078 [=======================>......] - ETA: 0s 4182/5078 [=======================>......] - ETA: 0s 4259/5078 [========================>.....] - ETA: 0s 4335/5078 [========================>.....] - ETA: 0s 4405/5078 [=========================>....] - ETA: 0s 4477/5078 [=========================>....] - ETA: 0s 4551/5078 [=========================>....] - ETA: 0s 4625/5078 [==========================>...] - ETA: 0s 4700/5078 [==========================>...] - ETA: 0s 4773/5078 [===========================>..] - ETA: 0s 4848/5078 [===========================>..] - ETA: 0s 4926/5078 [============================>.] - ETA: 0s 4999/5078 [============================>.] - ETA: 0s 5074/5078 [============================>.] - ETA: 0s 5078/5078 [==============================] - 4s 678us/step +Accuracy: 0.9237146778770103 +Micro-avg Precision: 0.9237146778770103 +Micro-avg Recall: 0.9237146778770103 +F1 Score: 0.9237146778770103 +RMSE: 3.379279631583039 diff --git a/sacred/sacred_runs/2/metrics.json b/sacred/sacred_runs/2/metrics.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/sacred/sacred_runs/2/metrics.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/sacred/sacred_runs/2/run.json b/sacred/sacred_runs/2/run.json new file mode 100644 index 0000000..85e2199 --- /dev/null +++ b/sacred/sacred_runs/2/run.json @@ -0,0 +1,100 @@ +{ + "artifacts": [ + "beer_review_sentiment_model.keras" + ], + "command": "run_experiment", + "experiment": { + "base_dir": "C:\\Users\\adamw\\REPOS\\ium_464979\\sacred", + "dependencies": [ + "keras==2.12.0", + "numpy==1.23.5", + "sacred==0.8.5", + "scikit-learn==1.2.2" + ], + "mainfile": "sacred_training_model.py", + "name": "464979", + "repositories": [ + { + "commit": "490b8cf77306ea482543e03ba29e37b07f689ae1", + "dirty": true, + "url": "https://git.wmi.amu.edu.pl/s464979/ium_464979.git" + } + ], + "sources": [ + [ + "sacred_training_model.py", + "_sources\\sacred_training_model_ccb7ce6317e0e291ec9a10a9f4fffffe.py" + ] + ] + }, + "heartbeat": "2024-06-11T21:08:46.548013", + "host": { + "ENV": {}, + "cpu": "Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz", + "gpus": { + "driver_version": "555.85", + "gpus": [ + { + "model": "NVIDIA GeForce GTX 1660 Ti", + "persistence_mode": false, + "total_memory": 6144 + } + ] + }, + "hostname": "DESKTOP-9SEHQM2", + "os": [ + "Windows", + "Windows-10-10.0.19045-SP0" + ], + "python_version": "3.11.7" + }, + "meta": { + "command": "run_experiment", + "config_updates": {}, + "named_configs": [], + "options": { + "--beat-interval": null, + "--capture": null, + "--comment": null, + "--debug": false, + "--enforce_clean": false, + "--file_storage": null, + "--force": false, + "--help": false, + "--id": null, + "--loglevel": null, + "--mongo_db": null, + "--name": null, + "--pdb": false, + "--print-config": false, + "--priority": null, + "--queue": false, + "--s3": null, + "--sql": null, + "--tiny_db": null, + "--unobserved": false, + "COMMAND": null, + "UPDATE": [], + "help": false, + "with": false + } + }, + "resources": [ + [ + "C:\\Users\\adamw\\REPOS\\ium_464979\\sacred\\beer_reviews_train.csv", + "sacred_runs\\_resources\\beer_reviews_train_e8dab75a0ec202f56510a0e1f9926ad7.csv" + ], + [ + "C:\\Users\\adamw\\REPOS\\ium_464979\\sacred\\beer_reviews_test.csv", + "sacred_runs\\_resources\\beer_reviews_test_56070f83bef3ee1d17d1a632aa55b798.csv" + ] + ], + "result": { + "dtype": "float64", + "py/object": "numpy.float64", + "value": 0.9237146778770103 + }, + "start_time": "2024-06-11T21:08:35.823687", + "status": "COMPLETED", + "stop_time": "2024-06-11T21:08:46.547012" +} \ No newline at end of file diff --git a/sacred/sacred_runs/_sources/sacred_training_model_ccb7ce6317e0e291ec9a10a9f4fffffe.py b/sacred/sacred_runs/_sources/sacred_training_model_ccb7ce6317e0e291ec9a10a9f4fffffe.py new file mode 100644 index 0000000..dc7dcda --- /dev/null +++ b/sacred/sacred_runs/_sources/sacred_training_model_ccb7ce6317e0e291ec9a10a9f4fffffe.py @@ -0,0 +1,84 @@ +import pandas as pd +from tensorflow.keras.preprocessing.text import Tokenizer +from tensorflow.keras.preprocessing.sequence import pad_sequences +from tensorflow.keras.models import Sequential +from tensorflow.keras.layers import Embedding, GlobalAveragePooling1D, Dense +from sklearn.metrics import accuracy_score, precision_recall_fscore_support, mean_squared_error +from sacred import Experiment +from sacred.observers import MongoObserver, FileStorageObserver +from math import sqrt + +ex = Experiment('464979') +# ex.observers.append(MongoObserver(url='mongodb://admin:IUM_2021@tzietkiewicz.vm.wmi.amu.edu.pl:27017')) +ex.observers.append(FileStorageObserver('sacred_runs')) + +@ex.config +def my_config(): + epochs = 10 + batch_size = 32 + +@ex.automain +def run_experiment(epochs, batch_size, _run): + train_data = pd.read_csv('beer_reviews_train.csv') + X_train = train_data[['review_aroma', 'review_appearance', 'review_palate', 'review_taste']] + y_train = train_data['review_overall'] + + tokenizer = Tokenizer(num_words=10000) + tokenizer.fit_on_texts(X_train) + X_train_seq = tokenizer.texts_to_sequences(X_train) + + X_train_pad = pad_sequences(X_train_seq, maxlen=100) + + model = Sequential([ + Embedding(input_dim=10000, output_dim=16, input_length=100), + GlobalAveragePooling1D(), + Dense(16, activation='relu'), + Dense(1, activation='sigmoid') + ]) + + model.compile(optimizer='adam', + loss='binary_crossentropy', + metrics=['accuracy']) + + model.fit(X_train_pad, y_train, epochs=epochs, batch_size=batch_size, validation_split=0.1) + + model.save('beer_review_sentiment_model.keras') + _run.add_artifact('beer_review_sentiment_model.keras') + + test_data = pd.read_csv('beer_reviews_test.csv') + X_test = test_data[['review_aroma', 'review_appearance', 'review_palate', 'review_taste']] + y_test = test_data['review_overall'] + + tokenizer = Tokenizer(num_words=10000) + tokenizer.fit_on_texts(X_test) + + X_test_text = X_test.astype(str).agg(' '.join, axis=1) + X_test_seq = tokenizer.texts_to_sequences(X_test_text) + X_test_pad = pad_sequences(X_test_seq, maxlen=100) + + predictions = model.predict(X_test_pad) + + if len(predictions.shape) > 1: + predictions = predictions[:, 0] + + results = pd.DataFrame({'Predictions': predictions, 'Actual': y_test}) + results.to_csv('beer_review_sentiment_predictions.csv', index=False) + + y_pred = results['Predictions'] + y_test = results['Actual'] + y_test_binary = (y_test >= 3).astype(int) + + accuracy = accuracy_score(y_test_binary, y_pred.round()) + precision, recall, f1, _ = precision_recall_fscore_support(y_test_binary, y_pred.round(), average='micro') + rmse = sqrt(mean_squared_error(y_test, y_pred)) + + print(f'Accuracy: {accuracy}') + print(f'Micro-avg Precision: {precision}') + print(f'Micro-avg Recall: {recall}') + print(f'F1 Score: {f1}') + print(f'RMSE: {rmse}') + + _run.add_resource('./beer_reviews_train.csv') + _run.add_resource('./beer_reviews_test.csv') + + return accuracy