Convolution2D дает неправильную форму вывода в Keras - PullRequest
0 голосов
/ 16 ноября 2018

Я следую уроку от здесь и застрял с простым созданием модели

model = Sequential()
model.add(Convolution2D(32, kernel_size=(3, 3), activation='relu', input_shape=(1, 28, 28)))
model.output_shape

Это должно дать (None, 32, 26, 26) вывод, но вместо этого я получу (None, -1, 26, 32).Я думаю, что-то не так с предоставленными параметрами, или мне нужно сделать дополнительную форму.Может быть, что-то изменилось для Convolution2D и Conv2D в Керасе?Я бегу 2.2.4 с Theano бэкэндом

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Ну, как я написал в своем комментарии. Я получил ошибку с вашим кодом. Итак, убедитесь, что у вас плохая форма на входе, если вы измените значение на input_shape=(28,28,1), тогда output_shape вернет (None, 26, 26, 32)

Я не знаю, действительно ли это то, что вы ищете.

0 голосов
/ 16 ноября 2018

Кажется, что каналы находятся на первой оси входных данных. Поэтому вам нужно установить data_format аргумент в "channels_first":

model = Sequential()
model.add(Convolution2D(32, kernel_size=(3, 3),
                        data_format='channels_first',
                        activation='relu', input_shape=(1, 28, 28)))
model.output_shape

Что дает:

(None, 32, 26, 26)
0 голосов
/ 16 ноября 2018

Проблема в том, что он использует Theano в качестве бэкэнда и, вероятно, вы используете tenorflow (вам следует еще раз проверить настройки).Вы можете изменить его с помощью:

import os
os.environ['KERAS_BACKEND'] = 'theano'

Это должно быть сделано перед импортом keras

...