我在 Keras 中有以下神经网络:inp = layers.Input((3,))#Middle layers omittedout_prop = layers.Dense(units=3, activation='softmax')(inp)out_value = layers.Dense(units=1, activation = 'linear')(inp)然后我准备了一个伪输入来测试我的网络:inpu = np.array([[1,2,3],[4,5,6],[7,8,9]])当我尝试预测时,会发生这种情况:In [45]:nn.network.predict(inpu)Out[45]: [array([[0.257513 , 0.41672954, 0.32575747], [0.20175152, 0.4763418 , 0.32190666], [0.15986516, 0.53449154, 0.30564335]], dtype=float32),array([[-0.24281949], [-0.10461146], [ 0.11201331]], dtype=float32)]所以,正如你在上面看到的,我想要两个输出:一个应该是一个大小为 3 的数组,另一个应该是一个正常值。相反,我得到一个 3x3 矩阵和一个包含 3 个元素的数组。我做错了什么?
1 回答

慕斯709654
TA贡献1840条经验 获得超5个赞
您将三个输入样本传递给网络:
>>> inpu.shape
(3,3) # three samples of size 3
并且您有两个输出层:其中一个输出每个样本的大小为 3的向量,另一个输出大小为 1(即标量)的向量,同样是每个样本。因此,输出形状将是(3, 3)和(3, 1)。
更新:如果您希望您的网络接受形状的输入样本(3,3)并输出大小为 3 和 1 的向量,并且您只想在您的网络中使用 Dense 层,那么您必须Flatten在模型中的某处使用一个层。一种可能的选择是在输入层之后立即使用它:
inp = layers.Input((3,3)) # don't forget to set the correct input shape
x = Flatten()(inp)
# pass x to other Dense layers
或者,您可以将数据展平以具有 的形状,(num_samples, 9)然后在不使用Flatten图层的情况下将其传递到您的网络。
更新 2:正如@Mete 在评论中正确指出的那样,(num_samples, 3, 3)如果每个输入样本的形状为,请确保输入数组的形状为(3,3)。
添加回答
举报
0/150
提交
取消