首页 > 解决方案 > 在 model.fit() 中指定验证数据时出现尺寸错误

问题描述

我有两个不同的输入。一个输入是 100 个大小为 200x6000 的矩阵,我将其提供给卷积神经网络,另一个输入由 100 个长度为 6000 的向量组成,我将其提供给全连接的神经网络。我将这两个网络连接起来,然后是一个完全连接的神经网络。

当我明确指定验证数据而不是使用validation_split=0.2 时,就会出现问题。然后它给了我以下错误:

在此处输入图像描述

我对卷积神经网络的输入是尺寸为 (100,1,200,6000) 的 image_train。全连接神经网络的输入维度为 (100,6000)。为了验证,数据 image_valid 的维度为 (30,1,200,6000),position_valid 的维度为 (30,6000)。

训练数据 Ytest 的维度为 (100,2),Yvalid 为 (30,2)

我的代码如下:

###Setting up the architecture

###Convolution neural network
i1 = Input(shape=(1, 200, 6000))

c1 = Conv2D(128*2, kernel_size=3,activation='relu',data_format='channels_first')(i1)
c1 = Conv2D(128*2, kernel_size=3, activation='relu')(c1)
c1 = Conv2D(128*2, kernel_size=4, activation='relu')(c1)
c1 = Dropout(0.2)(c1)
#c1 = Conv2D(128*2, kernel_size=4, activation='relu')(c1)
#c1 = Dropout(0.2)(c1)
c1 = Flatten()(c1)

###Fully connected neural network
i2 = Input(shape=(6000, ))
c2 = Dense(64, input_shape = (6000,), activation='relu')(i2)
#c2 = Dense(256, activation='relu', kernel_initializer='normal')(c2)
#c2 = Dense(64, input_shape = (4500,), activation='relu')(i2)
c2 = Dropout(0.2)(c2)

###Concatenating
c = concatenate([c1, c2])

x = Dense(256, activation='relu', kernel_initializer='normal')(c)
x = Dropout(0.25)(x)
output = Dense(2, activation='softmax')(x)

model = Model([i1, i2], [output])

model.summary()

model.compile(loss='categorical_crossentropy',
          optimizer='sgd',
          metrics=['accuracy'])

history = model.fit([image_train, positions_train], Ytest, batch_size=32,
          epochs=20,
          verbose=1,
          validation_data=([image_valid, positions_valid], Yvalid))

如果我使用validation_split = 0.2,同样的代码也可以工作。但是我想指定validation_data,当我这样做时会给出我上面提到的错误。见解将不胜感激。

标签: python-3.xneural-networkconv-neural-network

解决方案


推荐阅读