我正在Keras中定义加权均方误差,如下所示:
Tensor("loss_19/dense_20_loss/Shape:0", shape=(3,), dtype=int32)
我为每个预测列出了权重列表。预测的形状例如:(25,4)。这是通过最终密集层(尺寸为4)生成的。我希望在均方误差中对这些预测进行加权,因此我生成一个张量,并将其与平方和相乘。这是正确的方法吗?
因为,当我打印张量的形状时,对YTrue和YPred使用tf.shape会显示:
Tensor("loss_19/dense_20_loss/Shape_2:0", shape=(1,), dtype=int32)
以及重量:
options.language = cultureName;
答案 0 :(得分:1)
Keras API已经提供了一种提供权重的机制,例如model.fit
函数。来自documentation:
class_weight::可选的词典,将类索引(整数)映射到权重(浮点)值,用于对损失函数加权(仅在训练过程中)。这可能有助于告诉模型“更多关注”来自代表性不足的类的样本。
sample_weight::训练样本的可选Numpy权重数组,用于加权损失函数(仅在训练过程中)。您可以传递长度与输入样本相同的平坦(1D)Numpy数组(权重和样本之间的1:1映射),或者对于时间数据,可以传递具有形状的2D数组(samples,sequence_length) ),以对每个样本的每个时间步施加不同的权重。在这种情况下,您应该确保在compile()中指定sample_weight_mode =“ temporal”。
如果每个样本都有权重,则可以将NumPy数组作为sample_weight
传递,而无需编写自己的损失函数即可达到相同的效果。