Luc*_*Kim 0 python neural-network keras
我尝试在 Keras 中制作自定义损失函数。
我想做这个损失函数
输出的维度为80。批量大小为5000。
所以我在下面构建了这个损失函数。但这行不通。
def normalize_activation(y_true, y_pred):
nb_divide = K.reshape(K.sqrt(K.sum(K.square(y_pred), axis=1)),(5000, 1))
nb_divide=numpy.tile(nb_divide,80)
predicted=numpy.divide(y_pred,nb_divide)
return K.sum(K.square(y_true-predicted))
Run Code Online (Sandbox Code Playgroud)
ValueError:使用序列设置数组元素。
出现此错误。我认为y_true,y_pred的形状是(5000,80)。
我应该在哪里修复它?
损失函数应该避免所有非来自keras 后端的操作。这些值是张量,您必须将它们保留为张量。
而且您不需要重塑事物,除非您确实希望它们以特定的方式运行。
如果您有形状 (5000,80) 和 (5000,1),则无需需要即可对它们进行操作K.repeat_elements()
(相当于 numpy.tile)。
因此,假设 5000 是批量大小(样本数),80 是属于样本的唯一实际维度:
def normalize_loss(yTrue,yPred):
nb_divide = K.sqrt(K.sum(K.square(yPred),axis=1,keepdims=True))
#keepdims=True keeps the shape like (5000,1)
#this is not summing the entire batch, but only a single sample, is that correct?
predicted = yPred/nb_divide
return K.sum(K.square(yTrue-predicted))
Run Code Online (Sandbox Code Playgroud)
一些观察结果:
(我不是这里的损失函数专家)您仅除以预测部分,而不除以真实部分。这不会在两个值之间产生巨大差异并导致误导性的损失函数吗?(再说一遍,我不是这里的专家)
K.mean()
通常人们在损失函数的末尾使用,但我看到你使用了K.sum()
. 这不是问题,也不会妨碍训练的进行。但是您可能希望针对不同大小的数据可视化相同的损失函数,并且能够独立于大小来比较它们。
归档时间: |
|
查看次数: |
2624 次 |
最近记录: |