Keras 预测得到的形状不正确?

3

我是Keras的新手,并尝试测试我刚训练的模型。

我正在使用Tensorflow后端和Python 3。

然而,我的输入形状与Keras在错误中显示的形状完全不同。以下是我的代码:

testnote = np.zeros((3,))
testnote[0] = 70
testnote[1] = 70
print(testnote.shape)
pred = model.predict(testnote)
print(pred)

我的测试数据的形状(testnote)是"(3,)",但当我运行预测(predict)函数时出现错误:"ValueError: Error when checking input: expected dense_1_input to have shape (3,) but got array with shape (1,)"。为什么Keras会将testnote的形状解读为(1,),而我已经确认形状为(3,)了呢?它是否使用了一些不同的"形状"标准?我尝试过调整形状、添加括号和其他很多方法,但我不知道问题出在哪里。

额外提供的信息是,该模型接受一个包含3个标量输入(表示音高、速度和乐器类别)的数组,并输出一个包含1025个标量输出的数组。我小心地没有使用"维度"这个词,因为我认为这就是我困惑的地方,而且从技术上讲,两者都只有1个维度。我确信我的模型有很多问题,我必须在此之后修复它们。但是,我希望能让这个预测函数工作起来,以便我可以理解我的输出看起来像什么。

感谢您提前提供的任何帮助。


你能否提供一个最小化且完整的例子来展示问题? - NPE
1个回答

8

Keras的Model隐式地期望您的数据(以一个np array形式传递)具有批量大小的维度。目前,您的模型将testnote解释为形状为1的3个样本。请尝试按照以下方式向“testnote”添加批次维度:

testnote = testnote.reshape(1,-1)

这将会把 testnote 重塑为形状为 (1, 3) 的张量,这样你就能明确地定义批次大小为 1。

这个做到了我需要的,而且我觉得我明白了自己哪里出了问题。输出的形状是正确的,至少这一点是对的。现在我会回过头来检查我的模型,并解决可能更基本的误解。 - Martin Tarrou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接