我有一个多输入 Keras 模型。这里的输入:[<tf.Tensor 'input_1:0' shape=(None, 256, 256, 3) dtype=float32>, <tf.Tensor 'input_2:0' shape=(None, 256, 256, 3) dtype=float32>, <tf.Tensor 'input_3:0' shape=(None, 256, 256, 3) dtype=float32>, <tf.Tensor 'input_4:0' shape=(None, 256, 256, 3) dtype=float32>]这里是模型的输入形状:[(None, 256, 256, 3), (None, 256, 256, 3), (None, 256, 256, 3), (None, 256, 256, 3)]训练数据形状如下:(4, 422, 256, 256, 3)4 = number of inputs (consist of appended arrays together).422 = number of training images in each input.256, 256, 3 = shape of the images当我调用该fit函数时:model.fit(train_x, train_y, validation_split=0.20, epochs=5, batch_size=3)出现以下错误:ValueError:层 conv1_pad_0 的输入 0 与该层不兼容:预期 ndim=4,发现 ndim=5。收到的完整形状:[3, 422, 256, 256, 3]我已经尝试过这篇文章中给出的解决方案,但我发现基数不匹配。ValueError:数据基数不明确:我尝试过像下面这样传递火车数据,它有效:model.fit([train_x[0], train_x[1], train_x[2], train_x[3]], train_y, validation_split=0.20, epochs=5, batch_size=3)现在,如果我想将模型扩展到 20 个输入,上面的代码行将会出现问题。更新:该模型基于预训练的ResNet50,所有输入都是没有顶层的 resnet50 ,并从以下三层开始:input_1_0 (InputLayer) [(None, 256, 256, 3) 0 conv1_pad_0 (ZeroPadding2D) (None, 262, 262, 3) 0 input_1_0[0][0]conv1_conv_0 (Conv2D) (None, 128, 128, 64) 9472 conv1_pad_0[0][0] 用于训练/测试模型的数据处理如下:for row in np.array(tmp_data): row = images_preprocessing(row) # Depends on the model used train_x, test_x, train_y, test_y = split_data(row, target) # Here the train_test_split is used train_X.append(train_x) test_X.append(test_x) train_Y.append(train_y) test_Y.append(test_y)
1 回答
![?](http://img1.sycdn.imooc.com/533e4d00000171e602000200-100-100.jpg)
繁华开满天机
TA贡献1816条经验 获得超4个赞
尝试
train_x_list = [tf.squeeze(tx) for tx in tf.split(train_x, num_or_size_splits=train_x.shape[0], axis=0)]
它将生成一个张量列表,其中训练数据沿维度 0 分割。然后使用第二个解决方案,将列表提供给fit()
。
添加回答
举报
0/150
提交
取消