2017-08-08 97 views
1

我在loss.py文件中的keras中定義了一個新的丟失函數。我關閉並重新啓動anaconda提示符,但我得到了ValueError: ('Unknown loss function', ':binary_crossentropy_2')。我在windows 10上使用python2.7和anaconda運行keras。定義自定義丟失函數後keras「未知丟失函數」錯誤

我暫時通過在python文件中添加丟失函數來解決它我編譯我的模型。

+0

請提供一些源代碼,您不需要將損失添加到losses.py以使其正常工作。 –

+0

@MatiasValdenegro。我將它添加到了losses.py中,因爲我希望所有模型都能夠使用它,而不是將它定義在與模型相同的文件中。感謝提醒,我現在會這樣做。 – matchifang

回答

0

它看起來像你試圖通過字符串別名調用函數,這需要更多的篡改Keras的losses.py映射到函數的字符串(你不應該做的事情,因爲如果你更新包,它會被覆蓋) 。而不是僅僅聲明函數在您的項目,並把它傳遞給loss參數,例如:

from your.project import binary_crossentropy_2 
# ... 
model.fit(epochs, loss=binary_crossentropy_2) 

只要你的函數如下滿足要求here,它會正常工作。

+0

這似乎是做到這一點的方式,但是我無法導入'from keras.losses import binary_crossentropy_2'錯誤是:「無法導入名稱binary_crossentrophy2」 – matchifang

+0

您在哪裏定義函數?也許嘗試將聲明移動到您調用'model.fit()'的同一個文件中,因此不需要導入。如果你的項目中有一個名爲'keras'的包,那可能是問題,因爲Python會首先查看你的分發庫。 –

0

解決的辦法是將函數添加到環境文件夾中keras中的losses.py。起初,我在anaconda2/pkgs/keras.../losses.py中添加了它,所以這就是我得到錯誤的原因。

在環境losses.py的路徑是這樣的:

anaconda2/envs/envname/lib/python2.7/site-packages/keras/losses.py

2

在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})