diff --git a/8382/Gordiyenko/lb/5/main.py b/8382/Gordiyenko/lb/5/main.py new file mode 100644 index 00000000..cf4d6688 --- /dev/null +++ b/8382/Gordiyenko/lb/5/main.py @@ -0,0 +1,77 @@ +from tensorflow import keras +import matplotlib.pyplot as plt +from keras.datasets import cifar10 +from keras.models import Model +from keras.layers import Input, Convolution2D, MaxPooling2D, Dense, Dropout, Flatten +from keras.utils import np_utils +import numpy as np +import os +os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' + +batch_size = 128 +num_epochs = 20 +kernel_size = 3 +pool_size = 2 +conv_depth_1 = 32 +conv_depth_2 = 64 +drop_prob_1 = 0.25 +drop_prob_2 = 0.5 +hidden_size = 512 + +(X_train, y_train), (X_test, y_test) = cifar10.load_data() +num_train, depth, height, width = X_train.shape +num_test = X_test.shape[0] +num_classes = np.unique(y_train).shape[0] +X_train = X_train.astype('float32') +X_test = X_test.astype('float32') +X_train /= np.max(X_train) +X_test /= np.max(X_train) +Y_train = np_utils.to_categorical(y_train, num_classes) +Y_test = np_utils.to_categorical(y_test, num_classes) + + +inp = Input(shape=(depth, height, width)) + +conv_1 = Convolution2D(conv_depth_1, (kernel_size, kernel_size), padding='same', activation='relu')(inp) +conv_2 = Convolution2D(conv_depth_1, (kernel_size, kernel_size), padding='same', activation='relu')(conv_1) +pool_1 = MaxPooling2D(pool_size=(pool_size, pool_size))(conv_2) +drop_1 = Dropout(drop_prob_1)(pool_1) + +conv_3 = Convolution2D(conv_depth_2, (kernel_size, kernel_size), padding='same', activation='relu')(drop_1) +conv_4 = Convolution2D(conv_depth_2, (kernel_size, kernel_size), padding='same', activation='relu')(conv_3) +pool_2 = MaxPooling2D(pool_size=(pool_size, pool_size))(conv_4) +drop_2 = Dropout(drop_prob_1)(pool_2) + +flat = Flatten()(drop_2) +hidden = Dense(hidden_size, activation='relu')(flat) +drop_3 = Dropout(drop_prob_2)(hidden) +out = Dense(num_classes, activation='softmax')(drop_3) + +model = Model(inputs=inp, outputs=out) +model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) + +history = model.fit(X_train, Y_train, batch_size=batch_size, epochs=num_epochs, verbose=1, validation_split=0.1) +history_dict = history.history +model.evaluate(X_test, Y_test, verbose=1) + +loss_values = history_dict['loss'] +val_loss_values = history_dict['val_loss'] +epochs = range(1, len(loss_values) + 1) +plt.plot(epochs, loss_values, 'bo', label='Training loss') +plt.plot(epochs, val_loss_values, 'g', label='Validation loss') +plt.title('Training and validation loss') +plt.xlabel('Epochs') +plt.ylabel('Loss') +plt.legend() +plt.show() + +plt.clf() +acc_values = history_dict['accuracy'] +val_acc_values = history_dict['val_accuracy'] +plt.plot(epochs, acc_values, 'bo', label='Training acc') +plt.plot(epochs, val_acc_values, 'g', label='Validation acc') +plt.title('Training and validation accuracy') +plt.xlabel('Epochs') +plt.ylabel('Accuracy') +plt.legend() +plt.show() diff --git a/8382/Gordiyenko/lb/5/report.pdf b/8382/Gordiyenko/lb/5/report.pdf new file mode 100644 index 00000000..b961d351 Binary files /dev/null and b/8382/Gordiyenko/lb/5/report.pdf differ