Keras - 无法将我的输入数据释放到 keras 模型。检查输入时出错

Posted

技术标签:

【中文标题】Keras - 无法将我的输入数据释放到 keras 模型。检查输入时出错【英文标题】:Keras - Can't freed my input data to keras model. Error when checking input 【发布时间】:2019-06-16 21:02:40 【问题描述】:

我正在尝试学习我的 Keras 模型真值表。只是为了了解更多有关 Keras 的信息,因此此示例仅用于学习目的。我的输入如下所示:

x = np.array([
    [
    [0, 0, 0],
    [0, 1, 0],
    [1, 0, 0],
    [1, 1, 1]
    ],
    [
    [0, 0, 0],
    [0, 1, 1],
    [1, 0, 1],
    [1, 1, 1]
    ],
    [
    [0, 0, 1],
    [0, 1, 1],
    [1, 0, 1],
    [1, 1, 0]
    ],
    [
    [0, 0, 1],
    [0, 1, 0],
    [1, 0, 0],
    [1, 1, 0]
    ],
    [
    [0, 0, 0],
    [0, 1, 1],
    [1, 0, 1],
    [1, 1, 0]
    ], 
    [
    [0, 0, 1],
    [0, 1, 0],
    [1, 0, 0],
    [1, 1, 1],
    ]
])

y = np.array([['AND'],['OR'],['NAND'], ['NOR'], ['XOR'], ['XNOR']])

当我将它输入第一层时,我会执行以下操作:

model = Sequential()
model.add(Dense(72, input_shape=(6, 4, 3)))
model.add(Activation('tanh'))
model.add(Dense(6))
model.add(Activation('sigmoid'))
sgd = SGD(lr=0.1)
model.compile(loss='sparse_categorical_crossentropy', optimizer=sgd)
model.fit(x, y, epochs=1000, batch_size=32)

我的输入形状是 6 个门,每个门有 4 行和 3 个列,以及 72 的密集层,因为 6 * 4 * 3。现在当我执行此操作时,出现以下错误:

ValueError: Error when checking input: expected dense_32_input to have 4 dimensions, but got array with shape (6, 4, 3)

谁能解释我做错了什么以及将来我应该如何将我的数据输入到 Keras 中?

提前致谢!

【问题讨论】:

【参考方案1】:

第一个密集层中的 input_shape 应该是 (4, 3) 而不是 (6, 4, 3)。第一个维度(在您的情况下为 6)用于批量大小,您不应在输入形状中指定。

您的模型也存在更多问题。您可能希望在输出层使用 softmax 而不是 sigmoid。其次,带有标签的 y 向量应该具有数值。例如,您可以用整数索引来表示每个单词。第三,我认为您希望在模型的开头有一个 Flatten 层,以将您的 2 级输入张量展平为 1 级张量。

【讨论】:

谢谢 Anna,但我试过了,但它会抱怨:检查目标时出错:预期 activation_44 有 3 个维度,但得到了形状为 (6, 1) 的数组 我已经编辑了我的答案,并就如何改进您的模型提出了一些建议。您在这里遇到的问题可能是因为您没有在密集层之前展平输入。 嗨 Anna,感谢您的建议,现在可以训练模型了。感谢您的解释!

以上是关于Keras - 无法将我的输入数据释放到 keras 模型。检查输入时出错的主要内容,如果未能解决你的问题,请参考以下文章

Keras 输入 Pandas 数据框

如何使用 Tensorflow 张量设置 Keras 层的输入?

无法向自定义损失输入数据:渴望执行函数的输入不能是 Keras 符号张量

Keras:微调 Inception 时精度下降

由于 WDDM 模式,不允许将我的 GTX1050 用于 tensorflow/keras

如何将我的 keras 模型保存到谷歌驱动器或计算机中?