Результаты maxpooling не отображаются в выходных данных model.summary () - PullRequest
0 голосов
/ 01 марта 2019

Я новичок в Керасе.Я пытаюсь построить модель, для которой я использую последовательную модель.Когда я пытаюсь уменьшить размер ввода с 28 до 14 или меньше с помощью функции maxpooling, результаты функции maxpooling не отображаются при вызове функции model.summary ().Я пытаюсь достичь точности 0,99 или выше после трассировки, т. Е. При вызове model.score () результат точности должен быть 0,99 или выше. Модель сборки, которую я пока что могу увидеть здесь

from keras.layers import Activation, MaxPooling2D
model = Sequential()
model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(28,28,1)))
model.add(Convolution2D(32, 1, activation='relu'))
MaxPooling2D(pool_size=(2, 2))
model.add(Convolution2D(32, 26))
model.add(Convolution2D(10, 1))
model.add(Flatten())
model.add(Activation('softmax'))

model.summary()

Выход -

Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_29 (Conv2D)           (None, 26, 26, 32)        320       
_________________________________________________________________
conv2d_30 (Conv2D)           (None, 26, 26, 32)        1056      
_________________________________________________________________
conv2d_31 (Conv2D)           (None, 1, 1, 32)          692256    
_________________________________________________________________
conv2d_32 (Conv2D)           (None, 1, 1, 10)          330       
_________________________________________________________________
flatten_7 (Flatten)          (None, 10)                0         
_________________________________________________________________
activation_7 (Activation)    (None, 10)                0         
=================================================================
Total params: 693,962
Trainable params: 693,962
Non-trainable params: 0
____________________________

Размер партии, которую я использую, равен 32, а количество эпох - 10.

model.compile(loss='categorical_crossentropy',
         optimizer='adam',
         metrics=['accuracy'])
model.fit(X_train, Y_train, batch_size=32, nb_epoch=10, verbose=1)

score = model.evaluate(X_test, Y_test, verbose=0)
print(score)

Выход после тренировки -

[0.09016687796734459, 0.9814]

1 Ответ

0 голосов
/ 01 марта 2019

Вы не добавляете слой Maxpooling2D в вашу модель ...

model.add(MaxPooling2D(pool_size=(2, 2)))

Кроме того, выходные данные вашего maxpooling будут иметь форму (Нет, 13, 13, 32)сверточное ядро ​​в следующем слое (в вашем случае 26) не может быть больше размеров вашего текущего (13).Ваш код должен выглядеть примерно так:

from keras.layers import Activation, MaxPooling2D, Dense

model = Sequential()
model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(28,28,1)))
model.add(Convolution2D(32, 1, activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(32, 8))
model.add(Convolution2D(10, 6))
model.add(Flatten())
model.add(Activation('softmax'))
print(model.summary())

Вывод

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 26, 26, 32)        320       
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 26, 26, 32)        1056      
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 13, 13, 32)        0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 6, 6, 32)          65568     
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 1, 1, 10)          11530     
_________________________________________________________________
flatten_1 (Flatten)          (None, 10)                0         
_________________________________________________________________
activation_1 (Activation)    (None, 10)                0         
=================================================================
Total params: 78,474
Trainable params: 78,474
Non-trainable params: 0
___________________________________

PS: я бы подумал об использовании меньших размеров ядра и слоя FC на выходе, так как это более практичнорешение в большинстве случаев, чем пытаться сопоставить выходные формы свертки

...