为了账号安全,请及时绑定邮箱和手机立即绑定

Keras:大小为 x*x 的输入生成不需要的输出 y*x

Keras:大小为 x*x 的输入生成不需要的输出 y*x

郎朗坤 2021-08-24 15:39:42
我在 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)。


查看完整回答
反对 回复 2021-08-24
  • 1 回答
  • 0 关注
  • 237 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号