ValueError: Вход 0 несовместим со слоем conv2d_2: ожидаемый ndim = 4, найденный ndim = 5 в Керасе - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь использовать функцию для добавления слоев в очень глубокий CNN, используя керасы.Вот моя функция:

def add_layer(input_shape, kernel_size, filters, count):
    x = Conv2D(filters, (kernel_size, kernel_size), padding = 'same', activation= None)(Input(input_shape))
    x = BatchNormalization()(x) 
    x = Activation('relu')(x)
    x = Conv2D(filters, (kernel_size, kernel_size), padding = 'same', activation= None)(x)
    x = BatchNormalization()(x) 
    x = Activation('relu')(x)
    return keras.layers.add([x,Input(input_shape)])

Когда я вызываю эту функцию из:

x = Input(shape = (6,264,264))
y = Conv2D(64, (7, 7), padding='same', activation='relu')(x)
y = MaxPooling2D((2,2))(y)
y = add_layer(y.shape, 3, 64, 3)

Она выдает следующую ошибку:

ValueError: Input 0 is incompatible with layer conv2d_2: expected ndim=4, found ndim=5

Когда я удаляю функцию add_layerи просто прекратить maxpooling до плотного слоя, я получаю:

AttributeError: 'Tensor' object has no attribute 'ndim'

В чем может быть проблема?(Кроме того, мой ввод имеет размер 50 np массивов (6 264 264)) т.е. (50 6 264 264)

1 Ответ

0 голосов
/ 28 мая 2018

Довольно уверен, что ваша строка,

x = Conv2D(filters, (kernel_size, kernel_size), padding = 'same', activation= None)(Input(input_shape))

должна быть

x = Conv2D(filters, (kernel_size, kernel_size), padding = 'same', activation= None)(Input(batch_shape=input_shape))

По умолчанию ny_layer.shape добавитразмер партии в форме.Однако для Input(input_shape) первый аргумент предполагает, что фигура не имеет размер пакета, и добавляет к ее выводу другое измерение.Это объясняет происхождение дополнительного измерения.

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