在自定义训练模式里:
BinaryCrossentropy(官网链接)可以直接申明,如下:
#set loss func
loss=tf.losses.BinaryCrossentropy(from_logits=True) # from_logits=True表示最后一层没有添加激活
其在作为独立函数使用时,输出的时loss的均值,维度为1
# Example 1: (batch_size = 1, number of samples = 4)
y_true = [0, 1, 0, 0]
y_pred = [-18.6, 0.51, 2.94, -12.8]
bce = tf.keras.losses.BinaryCrossentropy(from_logits=True)
bce(y_true, y_pred).numpy()
0.865
而binary_crossentropy(官网链接)不可以申明
loss=tf.losses.binary_crossentropy()
TypeError: binary_crossentropy() missing 2 required positional arguments: 'y_true' and 'y_pred'
binary_crossentropy直接使用填入数据,输出loss大小和BATCHSIZE相同,维度为1*BATCHSIZE
y_true = [[0, 1], [0, 0]]
y_pred = [[0.6, 0.4], [0.4, 0.6]]
loss = tf.keras.losses.binary_crossentropy(y_true, y_pred)
assert loss.shape == (2,)
loss.numpy()
array([0.916, 0.714], dtype=float32)
一般compile的时候,使用的是小写的binary_crossentropy