【发布时间】:2018-03-01 11:10:09
【问题描述】:
我尝试在 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))
ValueError: 使用序列设置数组元素。
出现此错误。我认为y_true, y_pred的形状是(5000,80)。
我应该在哪里修复它??
【问题讨论】:
-
相当于使用
losses.mean_squared_error(y_true, K.l2_normalize(y_pred, axis=-1))。 -
或者您可以在模型末尾添加
Lambda(lambda x: K.l2_normalize(x, axis=-1))层,并使用loss='mse'。 -
@Yu-Yang 非常感谢!使用 lambda 时,最后一个链接的权重应该是 1。我做不到。所以我正在使用你的第一个解决方案。谢谢。但我想知道axis = -1的含义。我知道轴=0,轴=1。
-
axis=-1只是“最后一个轴”,在这种情况下,它将等同于axis=1,因此您可以使用其中任何一个。
标签: python neural-network keras