diff --git a/8382/Gordiyenko/lb/3/main.py b/8382/Gordiyenko/lb/3/main.py new file mode 100644 index 00000000..b6694a18 --- /dev/null +++ b/8382/Gordiyenko/lb/3/main.py @@ -0,0 +1,80 @@ +import numpy as np +from tensorflow.keras.layers import Dense +from tensorflow.keras.models import Sequential +from tensorflow.keras.datasets import boston_housing +import matplotlib.pyplot as plt +import os + +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' + + +def build_model(): + model = Sequential() + model.add(Dense(64, activation='relu', input_shape=(train_data.shape[1],))) + model.add(Dense(64, activation='relu')) + model.add(Dense(1)) + model.compile(optimizer='rmsprop', loss='mse', metrics=['mean_absolute_error']) + return model + + +(train_data, train_targets), (test_data, test_targets) = boston_housing.load_data() + +mean = train_data.mean(axis=0) +train_data -= mean +std = train_data.std(axis=0) +train_data /= std + +test_data -= mean +test_data /= std + + +def learn(num): + k = num + num_val_samples = len(train_data) // k + num_epochs = 20 + all_scores = [] + + mean_loss = [] + mean_mae = [] + mean_val_loss = [] + mean_val_mae = [] + + for i in range(k): + print('processing fold #', i+1) + val_data = train_data[i * num_val_samples: (i + 1) * num_val_samples] + val_targets = train_targets[i * num_val_samples: (i + 1) * num_val_samples] + partial_train_data = np.concatenate([train_data[:i * num_val_samples], train_data[(i + 1) * num_val_samples:]], + axis=0) + partial_train_targets = np.concatenate( + [train_targets[:i * num_val_samples], train_targets[(i + 1) * num_val_samples:]], axis=0) + model = build_model() + H = model.fit(partial_train_data, partial_train_targets, epochs=num_epochs, batch_size=1, + validation_data=(val_data, val_targets), verbose=0) + + # print(H.history.keys()) + mean_val_mae.append(H.history['val_mean_absolute_error']) + mean_mae.append(H.history['mean_absolute_error']) + + mean_val_loss.append(H.history['val_loss']) + mean_loss.append(H.history['loss']) + + plt.plot(np.mean(mean_mae, axis=0), 'g') + plt.plot(np.mean(mean_val_mae, axis=0), 'b') + plt.title('Mean model mae for ' + str(val) + ' folds') + plt.ylabel('mae') + plt.xlabel('Epochs') + plt.legend(['Training', 'Validation'], loc='upper left') + plt.show() + + plt.plot(np.mean(mean_loss, axis=0), 'g') + plt.plot(np.mean(mean_val_loss, axis=0), 'b') + plt.title('Mean model loss for ' + str(val) + ' folds') + plt.ylabel('loss') + plt.xlabel('Epochs') + plt.legend(['Training', 'Validation'], loc='upper left') + plt.show() + + +if __name__ == '__main__': + for val in [2, 4, 6, 8]: + learn(val) diff --git a/8382/Gordiyenko/lb/3/report.pdf b/8382/Gordiyenko/lb/3/report.pdf new file mode 100644 index 00000000..4b66b226 Binary files /dev/null and b/8382/Gordiyenko/lb/3/report.pdf differ