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

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

為什么必須在 Keras/張量流 2 中重塑輸入?

為什么必須在 Keras/張量流 2 中重塑輸入?

慕姐8265434 2022-09-13 17:50:35
我有一個簡單的網絡:input_layer = Input(1)inner_layer = Dense(4, activation='relu')(input_layer)output_layer = Dense(1, activation='linear')(inner_layer)model = Model(input_layer, output_layer)optimizer = Adam(learning_rate=0.01)model.compile(optimizer=optimizer, loss='mse')直觀地說,對輸入的推斷將只是 。但是,這會生成此錯誤:0model.predict(0)expected input_2 to have 2 dimensions, but got array with shape ()我知道它期望輸入(這是一個單個數字)是二維的,但我不明白Tensorflow接受什么作為有效輸入。我嘗試了許多不同的輸入組合,有些有效,有些不起作用,它似乎非常不一致,警告/錯誤通常沒有用:呼叫時 :model.predict()model.predict(0)- 投擲model.predict([0]) - 工程model.predict([[0]]) - 工程調用時(我在這里看到需要獲取漸變):model()model(0)- 投擲model([0])- 投擲model([[0]])- 投擲使用時:np.reshapemodel(np.reshape(0,[1,1])) - 工程model(np.reshape([0],[1,1])) - 工程model(np.reshape([[0]],[1,1])) - 工程似乎一直在工作的是使用numpy的功能。它始終適用于所有輸入,只要它們被重塑為形狀即可。reshapemodel.predict()model()[1,1]我的問題:在輸入形狀/類型方面,將輸入饋送到張量流模型中的準則是什么?“”是什么意思?shape ()“”是什么意思?(None, 1)為什么有效但無效?兩者都創建一個二維集合。reshape[[0]]為什么在調用 // 時,此警告顯示: ?model(0)model([0])model([[0]])WARNING:tensorflow:Model was constructed with shape Tensor("input_1:0", shape=(None, 1), dtype=float32) for input (None, 1), but it was re-called on a Tensor with incompatible shape ()
查看完整描述

1 回答

?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

張量的形狀是 (運行 )。表示動態確定的任何大?。ㄅ笮。?。是數據點的形狀。例如,這是形狀的張量:inputs = tf.keras.layers.Input(1)(None, 1)inputs.get_shape().as_list()None1(3, 1)


[[1], [2], [1]]

這是形狀的張量(3,)


[1, 2, 1]

如果定義形狀的張量,則必須提供相同形狀的數據。(None, 1)


具有正確的形狀,如果將其作為預期數據類型的 numpy 數組傳遞,則不會引發任何錯誤或警告:[[0]](1, 1)


import tensorflow as tf

import numpy as np


input_layer = tf.keras.layers.Input(1)

inner_layer = tf.keras.layers.Dense(4, activation='relu')(input_layer)

output_layer = tf.keras.layers.Dense(1, activation='linear')(inner_layer)

model = tf.keras.models.Model(input_layer, output_layer)

optimizer = tf.keras.optimizers.Adam(learning_rate=0.01)

model.compile(optimizer=optimizer, loss='mse')

print(model(np.array([[0.]], dtype=np.float32)).numpy()) # [[0.]]

print(model.predict(np.array([[0.], [1]], dtype=np.float32))) # [[0.        ]

                                                              # [0.08964952]]

np.reshape()工作,因為它會自動將您的列表轉換為numpy數組。有關詳情,請參閱官方文檔。np.reshape


還需要與 相同的形狀,但可以執行自動整形(在左側擴展尺寸,即 )。model.predict()model.__call__()[1] -- > [[1]]


查看完整回答
反對 回復 2022-09-13
  • 1 回答
  • 0 關注
  • 68 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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