tf源代码中:
def mean_squared_error(
labels, predictions, weights=1.0, scope=None,
loss_collection=ops.GraphKeys.LOSSES,
reduction=Reduction.SUM_BY_NONZERO_WEIGHTS):
"""Adds a Sum-of-Squares loss to the training procedure.
`weights` acts as a coefficient for the loss. If a scalar is provided, then
the loss is simply scaled by the given value. If `weights` is a tensor of size
`[batch_size]`, then the total loss for each sample of the batch is rescaled
by the corresponding element in the `weights` vector. If the shape of
`weights` matches the shape of `predictions`, then the loss of each
measurable element of `predictions` is scaled by the corresponding value of
`weights`.
Args:
labels: The ground truth output tensor, same dimensions as 'predictions'.
predictions: The predicted outputs.
weights: Optional `Tensor` whose rank is either 0, or the same rank as
`labels`, and must be broadcastable to `labels` (i.e., all dimensions must
be either `1`, or the same as the corresponding `losses` dimension).
scope: The scope for the operations performed in computing the loss.
loss_collection: collection to which the loss will be added.
reduction: Type of reduction to apply to loss.
Returns:
Weighted loss float `Tensor`. If `reduction` is `NONE`, this has the same
shape as `labels`; otherwise, it is scalar.
这里的参数weights十分有用,可以对需要求差异的输入部分截取,即只计算部分labels和predictions的MSE,最终除数也是真实的计算元素个数。
import tensorflowas tf
a = tf.constant([[1,2],[3,4]])
b = tf.constant([[2,1],[5,6]])
mask = tf.constant([[1,0],[1,0]])
# mse loss :
recon_loss = tf.losses.mean_squared_error(a, b, mask)
result = tf.Session().run(recon_loss)
print(result)
输出:[(1-2)^2+(3-5)^2]/2 = 2.5