Symulowanie-wizualne/sw_lab8.ipynb
Aleksandra Jonas 38cba2c34c updated lab8
2023-01-06 21:43:41 +01:00

68 KiB
Raw Blame History

Zadanie 8 - Alexnet + Dropout & BatchRegularization

Aleksandra Jonas, Aleksandra Gronowska, Iwona Christop

Przygotowanie danych

from IPython.display import Image, display
import sys
import subprocess
import pkg_resources
import numpy as np

required = { 'scikit-image'}
installed = {pkg.key for pkg in pkg_resources.working_set}
missing = required - installed
# Alexnet requires images to be of dim = (227, 227, 3)
newSize = (227,227)

if missing: 
    python = sys.executable
    subprocess.check_call([python, '-m', 'pip', 'install', *missing], stdout=subprocess.DEVNULL)

def load_train_data(input_dir):
    import numpy as np
    import pandas as pd
    import os
    from skimage.io import imread
    import cv2 as cv
    from pathlib import Path
    import random
    from shutil import copyfile, rmtree
    import json

    import seaborn as sns
    import matplotlib.pyplot as plt

    import matplotlib
    
    image_dir = Path(input_dir)
    categories_name = []
    for file in os.listdir(image_dir):
        d = os.path.join(image_dir, file)
        if os.path.isdir(d):
            categories_name.append(file)

    folders = [directory for directory in image_dir.iterdir() if directory.is_dir()]

    train_img = []
    categories_count=[]
    labels=[]
    for i, direc in enumerate(folders):
        count = 0
        for obj in direc.iterdir():
            if os.path.isfile(obj) and os.path.basename(os.path.normpath(obj)) != 'desktop.ini':
                labels.append(os.path.basename(os.path.normpath(direc)))
                count += 1
                img = imread(obj)#zwraca ndarry postaci xSize x ySize x colorDepth
                img = img[:, :, :3]
                img = cv.resize(img, newSize, interpolation=cv.INTER_AREA)# zwraca ndarray
                img = img / 255 #normalizacja
                train_img.append(img)
        categories_count.append(count)
    X={}
    X["values"] = np.array(train_img)
    X["categories_name"] = categories_name
    X["categories_count"] = categories_count
    X["labels"]=labels
    return X

def load_test_data(input_dir):
    import numpy as np
    import pandas as pd
    import os
    from skimage.io import imread
    import cv2 as cv
    from pathlib import Path
    import random
    from shutil import copyfile, rmtree
    import json

    import seaborn as sns
    import matplotlib.pyplot as plt

    import matplotlib

    image_path = Path(input_dir)

    labels_path = image_path.parents[0] / 'test_labels.json'

    jsonString = labels_path.read_text()
    objects = json.loads(jsonString)

    categories_name = []
    categories_count=[]
    count = 0
    c = objects[0]['value']
    for e in  objects:
        if e['value'] != c:
            categories_count.append(count)
            c = e['value']
            count = 1
        else:
            count += 1
        if not e['value'] in categories_name:
            categories_name.append(e['value'])

    categories_count.append(count)
    
    test_img = []

    labels=[]
    for e in objects:
        p = image_path / e['filename']
        img = imread(p)#zwraca ndarry postaci xSize x ySize x colorDepth
        img = img[:, :, :3]
        img = cv.resize(img, newSize, interpolation=cv.INTER_AREA)# zwraca ndarray
        img = img / 255#normalizacja
        test_img.append(img)
        labels.append(e['value'])

    X={}
    X["values"] = np.array(test_img)
    X["categories_name"] = categories_name
    X["categories_count"] = categories_count
    X["labels"]=labels
    return X
# Data load
data_train = load_train_data("./train_test_sw/train_sw")
values_train = data_train['values']
labels_train = data_train['labels']

data_test = load_test_data("./train_test_sw/test_sw")
X_test = data_test['values']
y_test = data_test['labels']
from sklearn.model_selection import train_test_split
X_train, X_validate, y_train, y_validate = train_test_split(values_train, labels_train, test_size=0.2, random_state=42)
from sklearn.preprocessing import LabelEncoder
class_le = LabelEncoder()
y_train_enc = class_le.fit_transform(y_train)
y_validate_enc = class_le.fit_transform(y_validate)
y_test_enc = class_le.fit_transform(y_test)
class_le = LabelEncoder()
y_train_enc = class_le.fit_transform(y_train)
y_validate_enc = class_le.fit_transform(y_validate)
y_test_enc = class_le.fit_transform(y_test)
import tensorflow as tf
train_ds = tf.data.Dataset.from_tensor_slices((X_train, y_train_enc))
validation_ds = tf.data.Dataset.from_tensor_slices((X_validate, y_validate_enc))
test_ds = tf.data.Dataset.from_tensor_slices((X_test, y_test_enc))
train_ds_size = tf.data.experimental.cardinality(train_ds).numpy()
test_ds_size = tf.data.experimental.cardinality(test_ds).numpy()
validation_ds_size = tf.data.experimental.cardinality(validation_ds).numpy()
print("Training data size:", train_ds_size)
print("Test data size:", test_ds_size)
print("Validation data size:", validation_ds_size)
Training data size: 820
Test data size: 259
Validation data size: 206
train_ds = (train_ds
                  .shuffle(buffer_size=train_ds_size)
                  .batch(batch_size=32, drop_remainder=True))
test_ds = (test_ds
                  .shuffle(buffer_size=train_ds_size)
                  .batch(batch_size=32, drop_remainder=True))
validation_ds = (validation_ds
                  .shuffle(buffer_size=train_ds_size)
                  .batch(batch_size=32, drop_remainder=True))
from tensorflow import keras

Dropout

Do warstw spłaszczonych

model_flat_drop = keras.models.Sequential([
    keras.layers.Conv2D(filters=96, kernel_size=(11,11), strides=(4,4), activation='relu', input_shape=(227,227,3)),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Conv2D(filters=256, kernel_size=(5,5), strides=(1,1), activation='relu', padding="same"),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Flatten(),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dropout(.5),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dropout(.5),
    keras.layers.Dense(10, activation='softmax')
])
model_flat_drop.compile(loss='sparse_categorical_crossentropy', optimizer=tf.optimizers.SGD(lr=.001), metrics=['accuracy'])
model_flat_drop.summary()
WARNING:absl:`lr` is deprecated, please use `learning_rate` instead, or use the legacy optimizer, e.g.,tf.keras.optimizers.legacy.SGD.
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv2d (Conv2D)             (None, 55, 55, 96)        34944     
                                                                 
 max_pooling2d (MaxPooling2D  (None, 27, 27, 96)       0         
 )                                                               
                                                                 
 conv2d_1 (Conv2D)           (None, 27, 27, 256)       614656    
                                                                 
 max_pooling2d_1 (MaxPooling  (None, 13, 13, 256)      0         
 2D)                                                             
                                                                 
 conv2d_2 (Conv2D)           (None, 13, 13, 384)       885120    
                                                                 
 conv2d_3 (Conv2D)           (None, 13, 13, 384)       1327488   
                                                                 
 conv2d_4 (Conv2D)           (None, 13, 13, 256)       884992    
                                                                 
 max_pooling2d_2 (MaxPooling  (None, 6, 6, 256)        0         
 2D)                                                             
                                                                 
 flatten (Flatten)           (None, 9216)              0         
                                                                 
 dense (Dense)               (None, 4096)              37752832  
                                                                 
 dropout (Dropout)           (None, 4096)              0         
                                                                 
 dense_1 (Dense)             (None, 4096)              16781312  
                                                                 
 dropout_1 (Dropout)         (None, 4096)              0         
                                                                 
 dense_2 (Dense)             (None, 10)                40970     
                                                                 
=================================================================
Total params: 58,322,314
Trainable params: 58,322,314
Non-trainable params: 0
_________________________________________________________________
from keras.callbacks import ModelCheckpoint, EarlyStopping

checkpoint = ModelCheckpoint("alex_1.h5", monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)
early = EarlyStopping(monitor='val_accuracy', min_delta=0, patience=20, verbose=1, mode='auto')

alex1 = model_flat_drop.fit_generator(
    steps_per_epoch=len(train_ds), 
    generator=train_ds, 
    validation_data= validation_ds, 
    validation_steps=len(validation_ds), 
    epochs=25, 
    callbacks=[checkpoint,early])
WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.
WARNING:tensorflow:`period` argument is deprecated. Please use `save_freq` to specify the frequency in number of batches seen.
/var/folders/6b/j4d60ym516x2s6wymzj707rh0000gn/T/ipykernel_13671/1946638494.py:6: UserWarning: `Model.fit_generator` is deprecated and will be removed in a future version. Please use `Model.fit`, which supports generators.
  alex1 = model_flat_drop.fit_generator(
Epoch 1/25
2023-01-06 21:33:12.260921: W tensorflow/tsl/platform/profile_utils/cpu_utils.cc:128] Failed to get CPU frequency: 0 Hz
25/25 [==============================] - ETA: 0s - loss: 2.2671 - accuracy: 0.1963
Epoch 1: val_accuracy improved from -inf to 0.20312, saving model to alex_1.h5
25/25 [==============================] - 24s 939ms/step - loss: 2.2671 - accuracy: 0.1963 - val_loss: 2.2120 - val_accuracy: 0.2031
Epoch 2/25
25/25 [==============================] - ETA: 0s - loss: 2.0757 - accuracy: 0.1875
Epoch 2: val_accuracy improved from 0.20312 to 0.28125, saving model to alex_1.h5
25/25 [==============================] - 22s 899ms/step - loss: 2.0757 - accuracy: 0.1875 - val_loss: 1.7334 - val_accuracy: 0.2812
Epoch 3/25
25/25 [==============================] - ETA: 0s - loss: 1.7064 - accuracy: 0.2100
Epoch 3: val_accuracy did not improve from 0.28125
25/25 [==============================] - 23s 940ms/step - loss: 1.7064 - accuracy: 0.2100 - val_loss: 1.6128 - val_accuracy: 0.2656
Epoch 4/25
25/25 [==============================] - ETA: 0s - loss: 1.6449 - accuracy: 0.2537
Epoch 4: val_accuracy improved from 0.28125 to 0.34896, saving model to alex_1.h5
25/25 [==============================] - 23s 918ms/step - loss: 1.6449 - accuracy: 0.2537 - val_loss: 1.5930 - val_accuracy: 0.3490
Epoch 5/25
25/25 [==============================] - ETA: 0s - loss: 1.6596 - accuracy: 0.2275
Epoch 5: val_accuracy did not improve from 0.34896
25/25 [==============================] - 23s 928ms/step - loss: 1.6596 - accuracy: 0.2275 - val_loss: 1.5650 - val_accuracy: 0.2865
Epoch 6/25
25/25 [==============================] - ETA: 0s - loss: 1.6292 - accuracy: 0.2625
Epoch 6: val_accuracy did not improve from 0.34896
25/25 [==============================] - 23s 935ms/step - loss: 1.6292 - accuracy: 0.2625 - val_loss: 1.5573 - val_accuracy: 0.3021
Epoch 7/25
25/25 [==============================] - ETA: 0s - loss: 1.6197 - accuracy: 0.2562
Epoch 7: val_accuracy did not improve from 0.34896
25/25 [==============================] - 23s 929ms/step - loss: 1.6197 - accuracy: 0.2562 - val_loss: 1.5328 - val_accuracy: 0.3125
Epoch 8/25
25/25 [==============================] - ETA: 0s - loss: 1.5907 - accuracy: 0.2975
Epoch 8: val_accuracy improved from 0.34896 to 0.36458, saving model to alex_1.h5
25/25 [==============================] - 24s 943ms/step - loss: 1.5907 - accuracy: 0.2975 - val_loss: 1.4958 - val_accuracy: 0.3646
Epoch 9/25
25/25 [==============================] - ETA: 0s - loss: 1.5715 - accuracy: 0.2962
Epoch 9: val_accuracy improved from 0.36458 to 0.40104, saving model to alex_1.h5
25/25 [==============================] - 24s 944ms/step - loss: 1.5715 - accuracy: 0.2962 - val_loss: 1.4821 - val_accuracy: 0.4010
Epoch 10/25
25/25 [==============================] - ETA: 0s - loss: 1.5357 - accuracy: 0.3162
Epoch 10: val_accuracy did not improve from 0.40104
25/25 [==============================] - 23s 937ms/step - loss: 1.5357 - accuracy: 0.3162 - val_loss: 1.4562 - val_accuracy: 0.3958
Epoch 11/25
25/25 [==============================] - ETA: 0s - loss: 1.5030 - accuracy: 0.3262
Epoch 11: val_accuracy improved from 0.40104 to 0.45833, saving model to alex_1.h5
25/25 [==============================] - 24s 970ms/step - loss: 1.5030 - accuracy: 0.3262 - val_loss: 1.4106 - val_accuracy: 0.4583
Epoch 12/25
25/25 [==============================] - ETA: 0s - loss: 1.4862 - accuracy: 0.3613
Epoch 12: val_accuracy improved from 0.45833 to 0.53125, saving model to alex_1.h5
25/25 [==============================] - 25s 1s/step - loss: 1.4862 - accuracy: 0.3613 - val_loss: 1.3597 - val_accuracy: 0.5312
Epoch 13/25
25/25 [==============================] - ETA: 0s - loss: 1.4194 - accuracy: 0.4162
Epoch 13: val_accuracy did not improve from 0.53125
25/25 [==============================] - 24s 974ms/step - loss: 1.4194 - accuracy: 0.4162 - val_loss: 1.3095 - val_accuracy: 0.4583
Epoch 14/25
25/25 [==============================] - ETA: 0s - loss: 1.3418 - accuracy: 0.4437
Epoch 14: val_accuracy did not improve from 0.53125
25/25 [==============================] - 24s 959ms/step - loss: 1.3418 - accuracy: 0.4437 - val_loss: 1.2787 - val_accuracy: 0.4792
Epoch 15/25
25/25 [==============================] - ETA: 0s - loss: 1.3059 - accuracy: 0.4675
Epoch 15: val_accuracy did not improve from 0.53125
25/25 [==============================] - 24s 951ms/step - loss: 1.3059 - accuracy: 0.4675 - val_loss: 1.2374 - val_accuracy: 0.4635
Epoch 16/25
25/25 [==============================] - ETA: 0s - loss: 1.2688 - accuracy: 0.4725
Epoch 16: val_accuracy did not improve from 0.53125
25/25 [==============================] - 24s 955ms/step - loss: 1.2688 - accuracy: 0.4725 - val_loss: 1.2178 - val_accuracy: 0.4583
Epoch 17/25
25/25 [==============================] - ETA: 0s - loss: 1.2209 - accuracy: 0.4875
Epoch 17: val_accuracy did not improve from 0.53125
25/25 [==============================] - 24s 958ms/step - loss: 1.2209 - accuracy: 0.4875 - val_loss: 1.2793 - val_accuracy: 0.3958
Epoch 18/25
25/25 [==============================] - ETA: 0s - loss: 1.1457 - accuracy: 0.5150
Epoch 18: val_accuracy improved from 0.53125 to 0.55729, saving model to alex_1.h5
25/25 [==============================] - 24s 980ms/step - loss: 1.1457 - accuracy: 0.5150 - val_loss: 1.0978 - val_accuracy: 0.5573
Epoch 19/25
25/25 [==============================] - ETA: 0s - loss: 1.1318 - accuracy: 0.5063
Epoch 19: val_accuracy did not improve from 0.55729
25/25 [==============================] - 27s 1s/step - loss: 1.1318 - accuracy: 0.5063 - val_loss: 1.0764 - val_accuracy: 0.5104
Epoch 20/25
25/25 [==============================] - ETA: 0s - loss: 1.1289 - accuracy: 0.5125
Epoch 20: val_accuracy improved from 0.55729 to 0.56771, saving model to alex_1.h5
25/25 [==============================] - 25s 1s/step - loss: 1.1289 - accuracy: 0.5125 - val_loss: 1.0067 - val_accuracy: 0.5677
Epoch 21/25
25/25 [==============================] - ETA: 0s - loss: 1.0175 - accuracy: 0.5638
Epoch 21: val_accuracy did not improve from 0.56771
25/25 [==============================] - 26s 1s/step - loss: 1.0175 - accuracy: 0.5638 - val_loss: 1.0095 - val_accuracy: 0.5625
Epoch 22/25
25/25 [==============================] - ETA: 0s - loss: 1.0559 - accuracy: 0.5288
Epoch 22: val_accuracy did not improve from 0.56771
25/25 [==============================] - 26s 1s/step - loss: 1.0559 - accuracy: 0.5288 - val_loss: 1.0557 - val_accuracy: 0.5208
Epoch 23/25
25/25 [==============================] - ETA: 0s - loss: 1.1151 - accuracy: 0.5412
Epoch 23: val_accuracy did not improve from 0.56771
25/25 [==============================] - 26s 1s/step - loss: 1.1151 - accuracy: 0.5412 - val_loss: 1.0837 - val_accuracy: 0.5052
Epoch 24/25
25/25 [==============================] - ETA: 0s - loss: 1.0158 - accuracy: 0.5625
Epoch 24: val_accuracy improved from 0.56771 to 0.58333, saving model to alex_1.h5
25/25 [==============================] - 28s 1s/step - loss: 1.0158 - accuracy: 0.5625 - val_loss: 0.9605 - val_accuracy: 0.5833
Epoch 25/25
 6/25 [======>.......................] - ETA: 20s - loss: 0.9373 - accuracy: 0.5781
import matplotlib.pyplot as plt
plt.plot(alex1.history["accuracy"])
plt.plot(alex1.history['val_accuracy'])
plt.plot(alex1.history['loss'])
plt.plot(alex1.history['val_loss'])
plt.title("Model accuracy")
plt.ylabel("Value")
plt.xlabel("Epoch")
plt.legend(["Accuracy","Validation Accuracy","Loss","Validation Loss"])
plt.show()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
alex1.evaluate(test_ds)
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'

Do warstw maxpooling

model_pool_drop = keras.models.Sequential([
    keras.layers.Conv2D(filters=96, kernel_size=(11,11), strides=(4,4), activation='relu', input_shape=(227,227,3)),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=256, kernel_size=(5,5), strides=(1,1), activation='relu', padding="same"),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Dropout(.5),
    keras.layers.Flatten(),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
model_pool_drop.compile(loss='sparse_categorical_crossentropy', optimizer=tf.optimizers.SGD(lr=.001), metrics=['accuracy'])
model_pool_drop.summary()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
checkpoint = ModelCheckpoint("alex_2.h5", monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)
early = EarlyStopping(monitor='val_accuracy', min_delta=0, patience=20, verbose=1, mode='auto')

alex2 = model_pool_drop.fit_generator(
    steps_per_epoch=len(train_ds), 
    generator=train_ds, 
    validation_data= validation_ds, 
    validation_steps=len(validation_ds), 
    epochs=25, 
    callbacks=[checkpoint,early])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
plt.plot(alex2.history["accuracy"])
plt.plot(alex2.history['val_accuracy'])
plt.plot(alex2.history['loss'])
plt.plot(alex2.history['val_loss'])
plt.title("Model accuracy")
plt.ylabel("Value")
plt.xlabel("Epoch")
plt.legend(["Accuracy","Validation Accuracy","Loss","Validation Loss"])
plt.show()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
alex2.evaluate(test_ds)
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'

Do warstw splotowych

model_conv_drop = keras.models.Sequential([
    keras.layers.Conv2D(filters=96, kernel_size=(11,11), strides=(4,4), activation='relu', input_shape=(227,227,3)),
    keras.layers.Dropout(.5),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Conv2D(filters=256, kernel_size=(5,5), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Flatten(),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
model_conv_drop.compile(loss='sparse_categorical_crossentropy', optimizer=tf.optimizers.SGD(lr=.001), metrics=['accuracy'])
model_conv_drop.summary()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
checkpoint = ModelCheckpoint("alex_3.h5", monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)
early = EarlyStopping(monitor='val_accuracy', min_delta=0, patience=20, verbose=1, mode='auto')

alex3 = model_conv_drop.fit_generator(
    steps_per_epoch=len(train_ds), 
    generator=train_ds, 
    validation_data= validation_ds, 
    validation_steps=len(validation_ds), 
    epochs=25, 
    callbacks=[checkpoint,early])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
plt.plot(alex3.history["accuracy"])
plt.plot(alex3.history['val_accuracy'])
plt.plot(alex3.history['loss'])
plt.plot(alex3.history['val_loss'])
plt.title("Model accuracy")
plt.ylabel("Value")
plt.xlabel("Epoch")
plt.legend(["Accuracy","Validation Accuracy","Loss","Validation Loss"])
plt.show()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
alex3.evaluate(test_ds)
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'

Do warstw spłaszczonych i maxpooling

model_flat_pool_drop = keras.models.Sequential([
    keras.layers.Conv2D(filters=96, kernel_size=(11,11), strides=(4,4), activation='relu', input_shape=(227,227,3)),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=256, kernel_size=(5,5), strides=(1,1), activation='relu', padding="same"),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Dropout(.5),
    keras.layers.Flatten(),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dropout(.5),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dropout(.5),
    keras.layers.Dense(10, activation='softmax')
])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
model_flat_pool_drop.compile(loss='sparse_categorical_crossentropy', optimizer=tf.optimizers.SGD(lr=.001), metrics=['accuracy'])
model_flat_pool_drop.summary()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
checkpoint = ModelCheckpoint("alex_4.h5", monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)
early = EarlyStopping(monitor='val_accuracy', min_delta=0, patience=20, verbose=1, mode='auto')

alex4 = model_flat_pool_drop.fit_generator(
    steps_per_epoch=len(train_ds), 
    generator=train_ds, 
    validation_data= validation_ds, 
    validation_steps=len(validation_ds), 
    epochs=25, 
    callbacks=[checkpoint,early])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
plt.plot(alex4.history["accuracy"])
plt.plot(alex4.history['val_accuracy'])
plt.plot(alex4.history['loss'])
plt.plot(alex4.history['val_loss'])
plt.title("Model accuracy")
plt.ylabel("Value")
plt.xlabel("Epoch")
plt.legend(["Accuracy","Validation Accuracy","Loss","Validation Loss"])
plt.show()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
alex4.evaluate(test_ds)
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'

Do warstw spłaszczonych i splotowych

model_flat_conv_drop = keras.models.Sequential([
    keras.layers.Conv2D(filters=96, kernel_size=(11,11), strides=(4,4), activation='relu', input_shape=(227,227,3)),
    keras.layers.Dropout(.5),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Conv2D(filters=256, kernel_size=(5,5), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Flatten(),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dropout(.5),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dropout(.5),
    keras.layers.Dense(10, activation='softmax')
])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
model_flat_conv_drop.compile(loss='sparse_categorical_crossentropy', optimizer=tf.optimizers.SGD(lr=.001), metrics=['accuracy'])
model_flat_conv_drop.summary()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
checkpoint = ModelCheckpoint("alex_5.h5", monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)
early = EarlyStopping(monitor='val_accuracy', min_delta=0, patience=20, verbose=1, mode='auto')

alex5 = model_flat_conv_drop.fit_generator(
    steps_per_epoch=len(train_ds), 
    generator=train_ds, 
    validation_data= validation_ds, 
    validation_steps=len(validation_ds), 
    epochs=25, 
    callbacks=[checkpoint,early])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
plt.plot(alex5.history["accuracy"])
plt.plot(alex5.history['val_accuracy'])
plt.plot(alex5.history['loss'])
plt.plot(alex5.history['val_loss'])
plt.title("Model accuracy")
plt.ylabel("Value")
plt.xlabel("Epoch")
plt.legend(["Accuracy","Validation Accuracy","Loss","Validation Loss"])
plt.show()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
alex5.evaluate(test_ds)
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'

Do warstw maxpooling i splotowych

model_pool_conv_drop = keras.models.Sequential([
    keras.layers.Conv2D(filters=96, kernel_size=(11,11), strides=(4,4), activation='relu', input_shape=(227,227,3)),
    keras.layers.Dropout(.5),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=256, kernel_size=(5,5), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Dropout(.5),
    keras.layers.Flatten(),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
model_pool_conv_drop.compile(loss='sparse_categorical_crossentropy', optimizer=tf.optimizers.SGD(lr=.001), metrics=['accuracy'])
model_pool_conv_drop.summary()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
checkpoint = ModelCheckpoint("alex_6.h5", monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)
early = EarlyStopping(monitor='val_accuracy', min_delta=0, patience=20, verbose=1, mode='auto')

alex6 = model_pool_conv_drop.fit_generator(
    steps_per_epoch=len(train_ds), 
    generator=train_ds, 
    validation_data= validation_ds, 
    validation_steps=len(validation_ds), 
    epochs=25, 
    callbacks=[checkpoint,early])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
plt.plot(alex6.history["accuracy"])
plt.plot(alex6.history['val_accuracy'])
plt.plot(alex6.history['loss'])
plt.plot(alex6.history['val_loss'])
plt.title("Model accuracy")
plt.ylabel("Value")
plt.xlabel("Epoch")
plt.legend(["Accuracy","Validation Accuracy","Loss","Validation Loss"])
plt.show()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
alex6.evaluate(test_ds)
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'

Do warstw spłaszczonych, maxpooling i splotowych

model_drop = keras.models.Sequential([
    keras.layers.Conv2D(filters=96, kernel_size=(11,11), strides=(4,4), activation='relu', input_shape=(227,227,3)),
    keras.layers.Dropout(.5),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=256, kernel_size=(5,5), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.Dropout(.5),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Dropout(.5),
    keras.layers.Flatten(),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dropout(.5),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dropout(.5),
    keras.layers.Dense(10, activation='softmax')
])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
model_drop.compile(loss='sparse_categorical_crossentropy', optimizer=tf.optimizers.SGD(lr=.001), metrics=['accuracy'])
model_drop.summary()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
checkpoint = ModelCheckpoint("alex_7.h5", monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)
early = EarlyStopping(monitor='val_accuracy', min_delta=0, patience=20, verbose=1, mode='auto')

alex7 = model_drop.fit_generator(
    steps_per_epoch=len(train_ds), 
    generator=train_ds, 
    validation_data= validation_ds, 
    validation_steps=len(validation_ds), 
    epochs=25, 
    callbacks=[checkpoint,early])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
plt.plot(alex7.history["accuracy"])
plt.plot(alex7.history['val_accuracy'])
plt.plot(alex7.history['loss'])
plt.plot(alex7.history['val_loss'])
plt.title("Model accuracy")
plt.ylabel("Value")
plt.xlabel("Epoch")
plt.legend(["Accuracy","Validation Accuracy","Loss","Validation Loss"])
plt.show()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
alex7.evaluate(test_ds)
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'

Batch Regularization

Bez dropoutu

model_batch = keras.models.Sequential([
    keras.layers.Conv2D(filters=96, kernel_size=(11,11), strides=(4,4), activation='relu', input_shape=(227,227,3)),
    keras.layers.BatchNormalization(),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Conv2D(filters=256, kernel_size=(5,5), strides=(1,1), activation='relu', padding="same"),
    keras.layers.BatchNormalization(),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.BatchNormalization(),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.BatchNormalization(),
    keras.layers.Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.BatchNormalization(),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Flatten(),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
model_batch.compile(loss='sparse_categorical_crossentropy', optimizer=tf.optimizers.SGD(lr=.001), metrics=['accuracy'])
model_batch.summary()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
checkpoint = ModelCheckpoint("alex_8.h5", monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)
early = EarlyStopping(monitor='val_accuracy', min_delta=0, patience=20, verbose=1, mode='auto')

alex8 = model_batch.fit_generator(
    steps_per_epoch=len(train_ds), 
    generator=train_ds, 
    validation_data= validation_ds, 
    validation_steps=len(validation_ds), 
    epochs=25, 
    callbacks=[checkpoint,early])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
plt.plot(alex8.history["accuracy"])
plt.plot(alex8.history['val_accuracy'])
plt.plot(alex8.history['loss'])
plt.plot(alex8.history['val_loss'])
plt.title("Model accuracy")
plt.ylabel("Value")
plt.xlabel("Epoch")
plt.legend(["Accuracy","Validation Accuracy","Loss","Validation Loss"])
plt.show()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
alex8.evaluate(test_ds)
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'

Z dropoutem

model_batch_drop = keras.models.Sequential([
    keras.layers.Conv2D(filters=96, kernel_size=(11,11), strides=(4,4), activation='relu', input_shape=(227,227,3)),
    keras.layers.BatchNormalization(),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Conv2D(filters=256, kernel_size=(5,5), strides=(1,1), activation='relu', padding="same"),
    keras.layers.BatchNormalization(),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.BatchNormalization(),
    keras.layers.Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.BatchNormalization(),
    keras.layers.Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), activation='relu', padding="same"),
    keras.layers.BatchNormalization(),
    keras.layers.MaxPool2D(pool_size=(3,3), strides=(2,2)),
    keras.layers.Flatten(),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dropout(.5),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dropout(.5),
    keras.layers.Dense(10, activation='softmax')
])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
model_batch_drop.compile(loss='sparse_categorical_crossentropy', optimizer=tf.optimizers.SGD(lr=.001), metrics=['accuracy'])
model_batch_drop.summary()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
checkpoint = ModelCheckpoint("alex_9.h5", monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)
early = EarlyStopping(monitor='val_accuracy', min_delta=0, patience=20, verbose=1, mode='auto')

alex9 = model_batch_drop.fit_generator(
    steps_per_epoch=len(train_ds), 
    generator=train_ds, 
    validation_data= validation_ds, 
    validation_steps=len(validation_ds), 
    epochs=25, 
    callbacks=[checkpoint,early])
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
plt.plot(alex9.history["accuracy"])
plt.plot(alex9.history['val_accuracy'])
plt.plot(alex9.history['loss'])
plt.plot(alex9.history['val_loss'])
plt.title("Model accuracy")
plt.ylabel("Value")
plt.xlabel("Epoch")
plt.legend(["Accuracy","Validation Accuracy","Loss","Validation Loss"])
plt.show()
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'
alex9.evaluate(test_ds)
Running cells with '/Users/jonas/.pyenv/versions/3.9.6/bin/python' requires ipykernel package.

Run the following command to install 'ipykernel' into the Python environment. 

Command: '/Users/jonas/.pyenv/versions/3.9.6/bin/python -m pip install ipykernel -U --force-reinstall'