Найти в Дзене
ЦифроПроф

Свёрточные слои Keras

В библиотеке Keras есть несколько вариантов свёрточных слоёв: Задача 1 В конце прошлой темы вы обучили полносвязную сеть для решения задачи классификации одежды. Замените эту сеть на свёрточную со слоями: Conv2D + relu + Flatten + Dense. Примените в свёрточном слое 4 фильтра размером 3x3. Используйте на слое Dense функцию активации SoftMax. Обучать свёрточную сеть не нужно. Вызовите у модели функцию summary(): она напечатает на экране информацию об устройстве сети. from tensorflow.keras import Sequential from tensorflow.keras.layers import Conv2D, Flatten, Dense import matplotlib.pyplot as plt import numpy as np features_train = np.load('/datasets/fashion_mnist/train_features.npy') target_train = np.load('/datasets/fashion_mnist/train_target.npy') features_test = np.load('/datasets/fashion_mnist/test_features.npy') target_test = np.load('/datasets/fashion_mnist/test_target.npy') features_train = features_train.reshape(-1, 28, 28, 1) / 255.0 features_test = features_test.reshape(-1, 28,
Фото из открытых источников
Фото из открытых источников

В библиотеке Keras есть несколько вариантов свёрточных слоёв:

  • Conv1D. Создаёт ядро свёртки, которое сворачивается с исходными данными в одном измерении для создания тензора выходных данных.
  • Conv2D. Применяется к изображениям, но может использоваться и для обработки других данных. Задача слоя — обработать изображение небольшим фильтром, который по нему скользит. Фильтрация проводится одновременно по всем каналам.
  • Conv3D. Предназначен для обработки исходных данных различной размерности.

Задача 1

В конце прошлой темы вы обучили полносвязную сеть для решения задачи классификации одежды. Замените эту сеть на свёрточную со слоями: Conv2D + relu + Flatten + Dense. Примените в свёрточном слое 4 фильтра размером 3x3. Используйте на слое Dense функцию активации SoftMax.

Обучать свёрточную сеть не нужно. Вызовите у модели функцию summary(): она напечатает на экране информацию об устройстве сети.

from tensorflow.keras import Sequential

from tensorflow.keras.layers import Conv2D, Flatten, Dense

import matplotlib.pyplot as plt

import numpy as np

features_train = np.load('/datasets/fashion_mnist/train_features.npy')

target_train = np.load('/datasets/fashion_mnist/train_target.npy')

features_test = np.load('/datasets/fashion_mnist/test_features.npy')

target_test = np.load('/datasets/fashion_mnist/test_target.npy')

features_train = features_train.reshape(-1, 28, 28, 1) / 255.0

features_test = features_test.reshape(-1, 28, 28, 1) / 255.0

model = Sequential()

model.add(Conv2D(filters=4, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))

model.compile(loss='sparse_categorical_crossentropy', optimizer='sgd', metrics=['acc'])

model.add(Flatten())

model.compile(loss='sparse_categorical_crossentropy', optimizer='sgd', metrics=['acc'])

model.add(Dense(10, activation='softmax',input_dim=features_train.shape[1]))

model.compile(loss='sparse_categorical_crossentropy', optimizer='sgd', metrics=['acc'])

model.summary()

Задача 2

Добавьте в сеть ещё один свёрточный слой с 4 фильтрами размером 3x3. Сделайте так, чтобы размер изображения после первого слоя не поменялся, а после второго — уменьшился в два раза.

Вызовите функцию summary() для просмотра устройства сети. Затем запустите обучение на одном объекте, чтобы убедиться в работоспособности кода

from tensorflow.keras import Sequential

from tensorflow.keras.layers import Conv2D, Flatten, Dense

import matplotlib.pyplot as plt

import numpy as np

features_train = np.load('/datasets/fashion_mnist/train_features.npy')

target_train = np.load('/datasets/fashion_mnist/train_target.npy')

features_test = np.load('/datasets/fashion_mnist/test_features.npy')

target_test = np.load('/datasets/fashion_mnist/test_target.npy')

features_train = features_train.reshape(-1, 28, 28, 1) / 255.0

features_test = features_test.reshape(-1, 28, 28, 1) / 255.0

model = Sequential()

model.add(Conv2D(filters=4, kernel_size=(3, 3), activation='relu', padding='same', input_shape=(28, 28, 1)))

model.add(Conv2D(filters=4, kernel_size=(3, 3), activation='relu', padding='same',strides = 2))

model.add(Flatten())

model.add(Dense(units=10, activation='softmax'))

model.compile(loss='sparse_categorical_crossentropy', optimizer='sgd', metrics=['acc'])

model.summary()

model.fit(features_train, target_train, epochs=1, verbose=1,

steps_per_epoch=1, batch_size=1)