Keras-自定义损失功能

问题描述

我正在尝试在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 (将#修改为@)