我在 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
提交
取消