问题描述
我正在尝试在Keras中实现自定义损失函数,该函数在概念上应类似于“加权分类交叉熵”。
这个想法是,某些错误分类应该比其他错误处罚更多。 我已经有了我的loss_matrix(顺便说一句,它是16x16的矩阵)
唯一可行的解决方案就是这个
https://github.com/keras-team/keras/issues/2115#issuecomment-207765342
import functools
from itertools import product
import keras.backend
def w_categorical_crossentropy(y_true,y_pred,weights):
nb_cl = len(weights)
final_mask = K.zeros_like(y_pred[:,0])
y_pred_max = K.max(y_pred,axis=1)
y_pred_max = K.expand_dims(y_pred_max,1)
y_pred_max_mat = K.equal(y_pred,y_pred_max)
for c_p,c_t in product(range(nb_cl),range(nb_cl)):
final_mask += (K.cast(weights[c_t,c_p],K.floatx()) * K.cast(y_pred_max_mat[:,K.floatx())* K.cast(y_true[:,c_t],K.floatx()))
return K.categorical_crossentropy(y_pred,y_true) * (final_mask+1) + K.categorical_crossentropy(y_pred,y_true)
w_array = loss_matrix
ncce = functools.partial(w_categorical_crossentropy,weights=w_array)
ncce.__name__ ='w_categorical_crossentropy'
几个月前它运行良好,但是现在我不得不再次对其进行处理,当我尝试训练模型时,出现此错误:
TypeError: in user code:
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:806 train_function *
return step_function(self,iterator)
<ipython-input-187-197f9d6ec93b>:7 w_categorical_crossentropy *
y_pred_max = K.max(y_pred,axis=1)
TypeError: 'dict' object is not callable
有人知道如何解决此问题吗?
谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)