我喜欢计算加权误差如下:
def calc_err(pred, targets, weights) :
nClass = np.size(pred, axis=0)
Is = [1.0 for i in range(nClass)]
nonTargets = C.minus(Is, targets)
wrongPred = C.minus(Is, pred)
wColumn = C.times(targets, weights)
wTarget = C.element_times(wColumn, targets)
wNonTarget = C.element_times(wColumn, nonTargets)
c1 = C.negate(C.reduce_sum(C.element_times(wTarget, C.log(pred)), axis = -1))
c2 = C.negate(C.reduce_sum(C.element_times(wNonTarget, C.log(wrongPred)), axis = -1))
ce = c1 + c2
return ce.eval()
其中pred是预测概率,目标是一个热阵列,权重是2D数组。我在下面创建了相应的自定义损失:
^{pr2}$当我试着训练时,我注意到虽然自定义损耗确实在减少,但是calc_err(pred,targets,weights)的测试误差只会减少一到两个时间段,或者根本没有减少。我的加权交叉熵(z,targets)正常还是我做错了什么?在
权重是常数还是参数?请确保这两个函数使用相同的输入、参数和常量。在
预加权是如何计算的:
重量定义或计算有什么问题吗?在
相关问题 更多 >
编程相关推荐