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

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

圖層權重形狀 (1, 1) 與為 keras 模型提供的權重形狀 (1,) 不兼容

圖層權重形狀 (1, 1) 與為 keras 模型提供的權重形狀 (1,) 不兼容

呼如林 2023-03-22 16:54:17
我使用 Keras 訓練了一個模型,但忘記保存模型。該模型是開發了許多其他模型的項目的一部分,但現在我無法繼續該項目。幸運的是,我保存了初始和最終訓練重量?,F在,我正在嘗試創建一個具有相同最終權重的模型來獲得預測。我正在編譯 keras 模型并使用函數 model.set_weights 將丟失模型的最終訓練權重設置為新模型。這是代碼。model = Sequential()model.add(Dense(1,input_dim = 1, activation = 'relu'))model.add(Dense(1, activation = 'relu'))model.compile(loss = 'mean_squared_error', optimizer = 'Adam', metrics = ['mse'])listOfNumpyArrays = [np.array([0.2]),np.array([0.2])]listOfNumpyArrays1 = listOfNumpyArraysmodel.layers[0].set_weights(listOfNumpyArrays)model.layers[1].set_weights(listOfNumpyArrays1)追溯ValueError                                Traceback (most recent call last)<ipython-input-31-e63437554e30> in <module>()----> 1 model.layers[0].set_weights(listOfNumpyArrays)      2 model.layers[1].set_weights(listOfNumpyArrays1)1 frames/usr/local/lib/python3.6/dist-packages/keras/engine/base_layer.py in set_weights(self, weights)   1124                                  str(pv.shape) +   1125                                  ' not compatible with '-> 1126                                  'provided weight shape ' + str(w.shape))   1127             weight_value_tuples.append((p, w))   1128         K.batch_set_value(weight_value_tuples)ValueError: Layer weight shape (1, 1) not compatible with provided weight shape (1,)
查看完整描述

1 回答

?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

您使用創建的 numpy 數組np.array([0.2])有一個形狀(1,),而您的權重數組有一個形狀(1,1)。雖然它們存儲相同數量的數據,但 numpy 將它們視為不同的形狀。您可以通過執行以下操作來解決此問題:


代替:


listOfNumpyArrays = [np.array([0.2]),np.array([0.2])]

使用:


listOfNumpyArrays = [np.empty(shape = (1,1), dtype = np.float32), np.empty(shape = (1,1), dtype = np.float32)]

listOfNumpyArrays[0][0] = 0.2

listOfNumpyArrays[1][0] = 0.2

無關的說明:


在這一行中:


listOfNumpyArrays1 = listOfNumpyArrays

看起來您想創建兩個不同的 numpy 數組列表,它們被初始化為相同的值。listOfNumpyArrays1但是,實際上將引用與 相同的列表listOfNumpyArrays。因此,當您執行set_weightson時listOfNumpyArrays1,它也會修改listOfNumpyArrays。要在創建兩個不同的列表時將它們初始化為相同的值,可以使用以下代碼:


listOfNumpyArrays1 = [np.copy(listOfNumpyArrays[0]), np.copy(listOfNumpyArrays[1])]

np.copy創建一個新數組,它是您傳遞的數組的副本。這可以使用列表理解以更 pythonic 的方式編寫,如下所示:


listOfNumpyArrays1 = [np.copy(x) for x in listOfNumpyArrays]


查看完整回答
反對 回復 2023-03-22
  • 1 回答
  • 0 關注
  • 95 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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