Как я могу добавить сверточный слой к этой проблеме? - PullRequest
0 голосов
/ 23 марта 2020

Я новичок ie в Конвентах, я спроектировал трехслойную сеть с 2 скрытыми слоями для классификации изображений.

Мне было интересно, как я могу добавить 2 слоя в сеть? Я понимаю, что ранняя остановка может быть немного трудно настроить. Я просто хочу построить график потери обучения и ошибки проверки, чтобы провести сравнение с тем, у которого нет con vnet (код, который я уже написал, выложен здесь)

1 Ответ

0 голосов
/ 23 марта 2020

Куда вы хотите добавить слой конвоя? Conv2D получает (N, H, W, C) в качестве входов и выходов, где N - размер пакета, H - высота, W - ширина, а C - размер канала.

В вашей сети есть все ( N, C) тензор. Итак, вам нужно изменить форму вектора на изображения или Свести изображения в вектор.

Вот пример, который получает (NHW C) тензор, поэтому вам не нужен x_train.reshape для сглаживания. Во многих известных сетях, таких как VGG, Re sNet имеет сначала слой Conv, а наконец - Dense. Он нацелен на получение объекта из слоев конвоя и прогнозирование класса по плотному слою.

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Conv2D, Flatten
from keras import regularizers
import numpy as np


(x_train, y_train), (x_test, y_test) = mnist.load_data()

# MNIST shape has lacks of channels, so add it. MNIST is gray scale so channel size is 1.
# (60000, 28, 28) -> (60000, 28, 28, 1)
# If you have color image, it shoud be 3 channels, RGB: [BATCH_SIZE, H, W, 3]
x_train = np.expand_dims(x_train, axis=-1)
x_test = np.expand_dims(x_test, axis=-1)

num_classes = 10
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

model_3 = Sequential()
model_3.add(Conv2D(32, kernel_size=2, padding='same', activation='relu', input_shape=(28, 28, 1)))
model_3.add(Conv2D(64, kernel_size=2, padding='same', activation='relu'))
model_3.add(Flatten())
model_3.add(Dense(256, activation='relu',kernel_regularizer=regularizers.l2(0.01)))
model_3.add(Dropout(0.2))
model_3.add(Dense(128, activation='relu',kernel_regularizer=regularizers.l2(0.01)))
model_3.add(Dropout(0.2))
model_3.add(Dense(64, activation='relu',kernel_regularizer=regularizers.l2(0.01)))
model_3.add(Dropout(0.2))
model_3.add(Dense(10, activation='softmax'))

model_3.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adam(),
              metrics=['accuracy'])

history = model_3.fit(
    x_train, y_train,
    batch_size=128,
    epochs=250,
    verbose=1,
    validation_data=(x_test, y_test))

Для изменения формы: https://keras.io/layers/core/

И имеется образец Conv2D MNIST. https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...