Импортировать Керас
от Керас.модели Импортировать Последовательный
от Керас.слои Импортировать Плотный, Выбывать, Сгладить
от Керас.слои Импортировать Conv2D, MaxPooling2D
от Керас Импортировать серверная часть как К
от Керас.наборы данных Импортировать fashion_mnist
от Керас.обратные вызовы Импортировать ЛямбдаОбратный звонок
размер партии “=” 128
num_classes “=” 10
эпохи “=” 12
# размеры входного изображения
img_rows, img_cols “=” 28, 28
# данные, разделенные между обучающими и тестовыми наборами
(x_train, y_train), (x_test, y_test) “=” fashion_mnist.load_data()
если К.image_data_format() == ‘каналы_сначала’:
x_train “=” x_train.изменить форму(x_train.форма[0], 1, img_rows, img_cols)
x_test “=” x_test.изменить форму(x_test.форма[0], 1, img_rows, img_cols)
input_shape “=” (1, img_rows, img_cols)
еще:
x_train “=” x_train.изменить форму(x_train.форма[0], img_rows, img_cols, 1)
x_test “=” x_test.изменить форму(x_test.форма[0], img_rows, img_cols, 1)
input_shape “=” (img_rows, img_cols, 1)
x_train “=” x_train.атипия(‘поплавок32’)
x_test “=” x_test.атипия(‘поплавок32’)
x_train “=” 255
x_test “=” 255
Распечатать(‘форма x_train:’, x_train.форма)
Распечатать(x_train.форма[0], «обучить образцы»)
Распечатать(x_test.форма[0], «испытательные образцы»)
# преобразовать векторы классов в бинарные матрицы классов
y_train “=” Керас.утилиты.to_categorical(y_train, num_classes)
y_test “=” Керас.утилиты.to_categorical(y_test, num_classes)
#Создание нашей CNN
модель “=” Последовательный()
модель.добавлять(Conv2D(32, размер_ядра“=”(3, 3),
активация“=”‘релу’,
input_shape“=”input_shape))
модель.добавлять(Conv2D(64, (3, 3), активация“=”‘релу’))
модель.добавлять(MaxPooling2D(pool_size“=”(2, 2)))
модель.добавлять(Выбывать(0,25))
модель.добавлять(Сгладить())
модель.добавлять(Плотный(128, активация“=”‘релу’))
модель.добавлять(Выбывать(0,5))
модель.добавлять(Плотный(num_classes, активация“=”‘софтмакс’))
#компилируем модель
модель.компилировать(потеря“=”Керас.убытки.categorical_crossentropy,
оптимизатор“=”Керас.оптимизаторы.Ададельта(),
показатели“=”[‘accuracy’])
# создание функции, которая будет вызываться в конце эпохи
деф on_epoch_end(_,журналы):
ПОРОГ “=” 0,90
если(журналы[‘val_acc’]> ПОРОГ):
модель.stop_training“=”Истинный
Распечатать(«Остановка тренировки. Точность проверки достигает 90%’)
лямбдак “=” ЛямбдаОбратный звонок(on_epoch_end“=”on_epoch_end)
история “=” модель.соответствовать(x_train, y_train,
размер партии“=”размер партии,
эпохи“=”эпохи,
подробный“=”1,
validation_split“=”0,3,
обратные вызовы“=”[lambdac])