猿问

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

我在 Keras 中有以下神经网络:


inp = layers.Input((3,))

#Middle layers omitted

out_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 个元素的数组。我做错了什么?


郎朗坤
浏览 238回答 1
1回答

慕斯709654

您将三个输入样本传递给网络:>>> 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 shapex = Flatten()(inp)# pass x to other Dense layers或者,您可以将数据展平以具有 的形状,(num_samples, 9)然后在不使用Flatten图层的情况下将其传递到您的网络。更新 2:正如@Mete 在评论中正确指出的那样,(num_samples, 3, 3)如果每个输入样本的形状为,请确保输入数组的形状为(3,3)。
随时随地看视频慕课网APP

相关分类

Python
我要回答