【问题标题】:Keras Functional API Multiple Input Shape ErrorsKeras 功能 API 多输入形状错误
【发布时间】:2020-07-07 17:27:45
【问题描述】:

我的目标是使用 CNN 遍历一张图片,然后在密集层之前添加一组额外的数据。

picIn = keras.Input(shape=x[0].shape)
conv1 = layers.Conv2D(32,kernel_size=3,padding='same',use_bias=False)(picIn)
batch1 = layers.BatchNormalization()(conv1)
leaky1 = layers.LeakyReLU(alpha=.3)(batch1)
conv2 = layers.Conv2D(32,kernel_size=3,padding='same',use_bias=False)(leaky1)
batch2 = layers.BatchNormalization()(conv2)
leaky2 = layers.LeakyReLU(alpha=.3)(batch2)
cdrop1 = layers.Dropout(.20)(leaky2)
conv3= layers.Conv2D(64,kernel_size=3,padding='same',use_bias=False)(cdrop1)
batch3 = layers.BatchNormalization()(conv3)
leaky3 = layers.LeakyReLU(alpha=.3)(batch3)
conv4 = layers.Conv2D(64,kernel_size=3,padding='same',use_bias=False)(leaky3)
batch4 = layers.BatchNormalization()(conv4)
leaky4 = layers.LeakyReLU(alpha=.3)(batch4)
cdrop2 = layers.Dropout(.20)(leaky4)
flat1 = layers.Flatten()(cdrop2)

rtheta1 = rtheta[trainCut]
rtheta1 = rtheta1.reshape(467526,1)
rtheta2 = rtheta[testCut]
rtheta2 = rtheta2.reshape(82247,1)

ip2 = keras.Input(shape=rtheta1.shape)
flat2 = layers.Flatten()(ip2)

merge = layers.Concatenate()([flat1,flat2])
hidden1 = layers.Dense(512,use_bias=False)(merge)
batch5 = layers.BatchNormalization()(hidden1)
leaky5 = layers.LeakyReLU(alpha=.3)(batch5)
ddrop1 = layers.Dropout(.20)(leaky5)
hidden2 = layers.Dense(512,use_bias=False)(ddrop1)
batch6 = layers.BatchNormalization()(hidden2)
leaky6 = layers.LeakyReLU(alpha=.3)(batch6)
ddrop2 = layers.Dropout(.20)(leaky6)
hidden3 = layers.Dense(512,use_bias=False)(merge)
batch7 = layers.BatchNormalization()(hidden1)
leaky7 = layers.LeakyReLU(alpha=.3)(batch5)
ddrop3 = layers.Dropout(.20)(leaky5)
output = layers.Dense(1)(ddrop3)
model = keras.Model(inputs = [picIn,ip2], outputs = output)

H = model.fit(x =[ x[trainCut],rtheta[trainCut]],y= y[trainCut],batch_size=args.bsize,validation_data=([x[testCut],rtheta[testCut]], y[testCut]),epochs=args.epochs)

我总是收到与输入形状相关的错误

dense 层的输入 0 与该层不兼容:输入形状的轴 -1 的预期值为 473926,但接收到的输入形状为 [None, 6401]

模型是用形状 (None, 467526, 1) 作为输入 Tensor("input_2:0", shape=(None, 467526, 1), dtype=float32) 构建的,但它是在输入上调用的形状不兼容(无、1、1)。

我不知道在这里究竟该做什么。 x[traincut] 是一个大小为 (467526,10,10,2) 的矩阵 rtheta1 是 (467526,1),y[traincut] 也是如此

验证数据相同,只是它是 82247 而不是 467526。

我在 ip2 之后尝试过没有展平,但我得到了一个不同的错误,但我认为核心问题仍然是一样的。

任何帮助将不胜感激。谢谢!

编辑:很明显,数据的形状不正确,但我想出了如何修复它。

【问题讨论】:

  • 在将训练数据放入第一个张量之前,您是否确保所有训练数据的形状一致?
  • 这就是问题所在。感谢您的帮助!
  • 别担心!我将在答案部分发布我的回复,以便您将其标记为已解决。

标签: tensorflow keras deep-learning concatenation flatten


【解决方案1】:

在将训练数据放入第一个张量之前,您是否确保所有训练数据的形状都是统一的?

【讨论】:

    猜你喜欢
    • 2019-05-07
    • 2021-12-04
    • 2017-10-15
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 2021-06-20
    相关资源
    最近更新 更多