Когда я запускаю CNN, я получаю жалобы от Keras, которые не имеют для меня никакого смысла.

Моя форма ввода должна быть 100x100. Он представляет собой предложение. Каждое слово представляет собой вектор из 100 измерений, и в предложении есть максимум 100 слов.

Я подаю восемь предложений в CNN. Я не уверен, означает ли это, что моя форма ввода должна быть 100x100x8.

Тогда следующие строки

Convolution2D(10, 3, 3, border_mode='same',
                       input_shape=(100, 100))

жалуется:

Ввод 0 несовместим со сверткой слоя2d_1: ожидается ndim = 4, найдено ndim = 3

Это не имеет смысла для меня, поскольку мое измерение ввода равно 2. Я могу пройти через него, изменив input_shape на (100,100,8). Но "ожидаемый бит ndim = 4" просто не имеет смысла для меня.

Я также не понимаю, почему слой свертки 3x3 с 10 фильтрами не принимает вход 100x100.

Даже я получаю жалобы на "ожидаемый ndim = 4". Я столкнулся с проблемой в моем слое активации. Там он жалуется:

Невозможно применить softmax к тензору, который не является 2D или 3D. Здесь ndim = 4

Может ли кто-нибудь объяснить, что здесь происходит и как это исправить? Большое спасибо.

Ответ 1

У меня была та же проблема, и я решил добавить одно измерение для аргумента channel to input_shape.

Я предлагаю следующее решение:

Convolution2D(10, 3, 3, border_mode='same', input_shape=(100, 100, 1))

Ответ 2

отсутствующим измерением для двумерных сверточных слоев является измерение "канала".

Для данных изображения размер канала равен 1 для изображений в оттенках серого и 3 для цветных изображений.

В вашем случае, чтобы убедиться, что Keras не будет жаловаться, вы можете использовать 2D свертку с 1 каналом или 1D свертку с 100 каналами.

Ссылка: http://keras.io/layers/convolutional/#convolution2d

Ответ 3

Проблема с input_shape. Попробуйте добавить дополнительное измерение/канал, чтобы позволить keras знать, что вы работаете с изображением в градациях серого, т.е. → 1

input_shape= (56,56,1). Вероятно, если вы используете обычную модель глубокого обучения, тогда это не вызовет проблем, но для Convnet это действительно так.