神经网络的输入形状不一致

问题描述 投票:0回答:1

我编写了两个简单的神经网络来将两个数字相加,并对一个数字进行平方。我用它们创建了一个程序来将两个数字相乘。

import tensorflow as tf
import numpy as np

model_add = tf.keras.models.load_model('model_add.keras')
model_sqr = tf.keras.models.load_model('model_sqr.keras')

predicted_product = model_sqr.predict(model_add.predict(np.array([3, 4]))) - model_sqr.predict(np.array([3])) -  model_sqr.predict(np.array([4]))
print(predicted_product/2)

我为方形模型指定了输入形状 (1,) 并根据该数据对其进行训练:

x_train = np.random.random((200000,1))*100-50

对于加法模型,我对其进行了训练

X_train = np.random.rand(num_train, 2)

我假设由于训练数组的每个元素都是每次训练期间输入到模型的内容,因此类似地,将使用相同的形状将测试数据输入到模型中。这与方形模型一样,我在形状 (200000,1) 的输入上训练它,并使用形状 (1,) 的 numpy 数组作为输入。

但是当我运行这个程序时,出现以下错误;

Invalid input shape for input Tensor("sequential_1/Cast:0", shape=(2,), dtype=float32). 
Expected shape (None, 2), but input has incompatible shape (2,)

看起来我应该使用 np.array([[3, 4]]) 而不是 np.array([3, 4])。但由于加法模型的训练数据的每个元素都是形状 (2,),所以我不应该使用它吗?

python numpy tensorflow keras neural-network
1个回答
0
投票

通常,TensorFlow 中的训练是按训练数据的批次完成的(目前,批次大小默认为

32
)。您的训练数据将使用批量大小进行分割,并通过模型迭代传播。因此,它确实在训练期间使用您的训练样本作为输入。

模型的推理也是如此。您可以将多个测试样本传递给模型(包括批量大小),这就是您收到错误的原因。

.predict()
函数需要样本集合(例如
np.array
)。由于加法模型的样本需要具有
(2,)
形状,因此为
.predict()
函数提供的所需形状必须为
(None, 2)
。 None 表示您可以拥有任意数量的样本。

请注意,

.predict()
函数的输出还会返回所提供样本数量的预测。

© www.soinside.com 2019 - 2024. All rights reserved.