我在loss.py文件中的keras中定義了一個新的丟失函數。我關閉並重新啓動anaconda提示符,但我得到了ValueError: ('Unknown loss function', ':binary_crossentropy_2')
。我在windows 10上使用python2.7和anaconda運行keras。定義自定義丟失函數後keras「未知丟失函數」錯誤
我暫時通過在python文件中添加丟失函數來解決它我編譯我的模型。
我在loss.py文件中的keras中定義了一個新的丟失函數。我關閉並重新啓動anaconda提示符,但我得到了ValueError: ('Unknown loss function', ':binary_crossentropy_2')
。我在windows 10上使用python2.7和anaconda運行keras。定義自定義丟失函數後keras「未知丟失函數」錯誤
我暫時通過在python文件中添加丟失函數來解決它我編譯我的模型。
它看起來像你試圖通過字符串別名調用函數,這需要更多的篡改Keras的losses.py
映射到函數的字符串(你不應該做的事情,因爲如果你更新包,它會被覆蓋) 。而不是僅僅聲明函數在您的項目,並把它傳遞給loss
參數,例如:
from your.project import binary_crossentropy_2
# ...
model.fit(epochs, loss=binary_crossentropy_2)
只要你的函數如下滿足要求here,它會正常工作。
這似乎是做到這一點的方式,但是我無法導入'from keras.losses import binary_crossentropy_2'錯誤是:「無法導入名稱binary_crossentrophy2」 – matchifang
您在哪裏定義函數?也許嘗試將聲明移動到您調用'model.fit()'的同一個文件中,因此不需要導入。如果你的項目中有一個名爲'keras'的包,那可能是問題,因爲Python會首先查看你的分發庫。 –
解決的辦法是將函數添加到環境文件夾中keras中的losses.py。起初,我在anaconda2/pkgs/keras.../losses.py
中添加了它,所以這就是我得到錯誤的原因。
在環境losses.py的路徑是這樣的:
anaconda2/envs/envname/lib/python2.7/site-packages/keras/losses.py
在Keras我們必須通過自定義功能,在load_model
功能:
def my_custom_func():
# your code
return
from keras.models import load_model
model = load_model('my_model.h5', custom_objects={'my_custom_func':
my_custom_func})
請提供一些源代碼,您不需要將損失添加到losses.py以使其正常工作。 –
@MatiasValdenegro。我將它添加到了losses.py中,因爲我希望所有模型都能夠使用它,而不是將它定義在與模型相同的文件中。感謝提醒,我現在會這樣做。 – matchifang