ValueError: Ошибка при проверке ввода: ожидалось, что input_1 будет иметь 5 измерений, но получил массив с формой (1221, 50, 50, 1) - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь запустить модель с xtrain=(1221,50,50,1) во время model.fit, она показывает эту ошибку

ValueError: Ошибка при проверке ввода: ожидалось, что input_1 имеет 5 измерений, но получен массив с формой (1221, 50, 50, 1)

я использую следующие функции:

model.compile(loss=categorical_crossentropy,optimizer=Adadelta(lr=0.8), metrics=['acc'])
model.fit(x=ZZ, y=yyy, batch_size=128, epochs=1, validation_split=0.2)

, когда я увеличиваю размеры до (1221,50,50,1,1) ) используя expand_dims я получаю эту ошибку:

ValueError: Ошибка при проверке ввода: ожидалось, что input_1 будет иметь форму (16, 50, 50, 1), но получил массив с формой (1221,50, 50, 1, 1)

ИДК, где я ошибаюсь

это моя модель

input_layer = Input((16, 50, 50, 1))
## convolutional layers
conv_layer1 = Conv3D(filters=8, kernel_size=(3, 3, 3), activation='relu')(input_layer)
conv_layer2 = Conv3D(filters=16, kernel_size=(3, 3, 3), activation='relu')(conv_layer1)

## add max pooling to obtain the most imformatic features
pooling_layer1 = MaxPool3D(pool_size=(2, 2, 2))(conv_layer2)

conv_layer3 = Conv3D(filters=32, kernel_size=(3, 3, 3), activation='relu')(pooling_layer1)
conv_layer4 = Conv3D(filters=64, kernel_size=(3, 3, 3), activation='relu')(conv_layer3)
pooling_layer2 = MaxPool3D(pool_size=(2, 2, 2))(conv_layer4)

## perform batch normalization on the convolution outputs before feeding it to MLP architecture
pooling_layer2 = BatchNormalization()(pooling_layer2)
flatten_layer = Flatten()(pooling_layer2)

## create an MLP architecture with dense layers : 4096 -> 512 -> 10
## add dropouts to avoid overfitting / perform regularization
dense_layer1 = Dense(units=2048, activation='relu')(flatten_layer)
dense_layer1 = Dropout(0.4)(dense_layer1)
dense_layer2 = Dense(units=512, activation='relu')(dense_layer1)
dense_layer2 = Dropout(0.4)(dense_layer2)
output_layer = Dense(units=6, activation='softmax')(dense_layer2) #Use 5 instead of 1

## define the model with input layer and output layer
model = Model(inputs=input_layer, outputs=output_layer)```

Ответы [ 3 ]

0 голосов
/ 21 января 2020

Проблема в вашем xtrain, он состоит из 1221 изображения формы (50,50,1), однако Conv3D ожидает изображения формы (16,50,50,1).

В случае, если вы запутались, значения input_layer в Conv2D не требуют значения общего количества изображений. Требуется только форма изображения, приходящего к нему.

Для вашей помощи вы можете посмотреть этот пример того, как изображения передаются и устанавливаются.

0 голосов
/ 24 января 2020

Я понимаю, какую ошибку я сделал, мой x_train должен был состоять из (X, 16,50,50,1), но 16 не было. это связано с ошибкой, при которой ввод был сделан.

Спасибо за вашу помощь Rishabh Sahrawat Orphee Faucoz MH304

0 голосов
/ 21 января 2020
input_layer = Input((16, 50, 50, 1))

В этой строке указывается, что вход имеет форму (16, 50, 50 ,1). Вы передаете в сеть весь (1221, 50, 50, 1) вектор. Вам нужно изменить форму на (X, 16, 50, 50, 1), чтобы элемент вектора имел желаемую форму (16, 50, 50, 1).

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