亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 252 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號