Допустим, у вас есть 1000
обучающие изображения, где каждое изображение 48x48
в оттенках серого. После того, как вы загрузили изображения в массив numpy, вы получите форму: (1000, 48, 48)
.
Это означает, что у вас есть 1000
элементов в вашем массиве, и каждый элемент представляет собой 48x48
матрицу.
Теперь, чтобы передать эти данные для обучения CNN
, вы должны изменить этот список на (1000, 48, 48, 1)
, где 1
обозначает размерность канала. Поскольку у вас есть изображения в оттенках серого, вы должны использовать 1
. Если это был RGB, это будет 3
.
Рассмотрим пример игрушки, приведенный ниже,
x_train = np.random.rand(1000, 48, 48) #images
y_train = np.array([np.random.randint(0, 2) for x in range(1000)]) # labels
# simple model
model = Sequential()
model.add(Conv2D(32, kernel_size=(5, 5),
activation='relu',
input_shape=(48,48,1)
)
)
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam')
# fitting model
model.fit(x_train, y_train, epochs=10, batch_size=32)
Это выдаст ошибку,
Ошибка при проверке ввода: ожидалось, что conv2d_3_input будет иметь 4 измерения, но получил массив с формой (1000, 48, 48)
Чтобы исправить это, измените x_train
следующим образом,
x_train = x_train.reshape(x_train.shape[0], x_train.shape[1], x_train.shape[2], 1)
Теперь подгоняем модель,
model.fit(x_train, y_train, epochs=10, batch_size=32)
Epoch 1/10
1000/1000 [==============================] - 1s 1ms/step - loss: 0.7177
Epoch 2/10
1000/1000 [==============================] - 1s 882us/step - loss: 0.6762
Epoch 3/10
1000/1000 [==============================] - 1s 870us/step - loss: 0.5882
Epoch 4/10
1000/1000 [==============================] - 1s 888us/step - loss: 0.4588
Epoch 5/10
1000/1000 [==============================] - 1s 906us/step - loss: 0.3272
Epoch 6/10
1000/1000 [==============================] - 1s 910us/step - loss: 0.2228
Epoch 7/10
1000/1000 [==============================] - 1s 895us/step - loss: 0.1607
Epoch 8/10
1000/1000 [==============================] - 1s 879us/step - loss: 0.1172
Epoch 9/10
1000/1000 [==============================] - 1s 886us/step - loss: 0.0935
Epoch 10/10
1000/1000 [==============================] - 1s 888us/step - loss: 0.0638