【发布时间】:2018-02-28 02:26:09
【问题描述】:
keras 版本:2.0.8
在某些 Keras 度量函数和损失函数中,使用 axis=-1 作为参数。
例如:
def binary_accuracy(y_true, y_pred):
return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)
就我而言:
y_true 的形状:(4,256,256,2)
y_pred 的形状:(4,256,256,2)
因此,binary_accuracy(y_true, y_pred) 应该返回一个 shape=(4,256,256) 的张量,而不是一个标量张量。
但是当使用 binary_accuracy 作为度量函数时:
model.compile(optimizer=adam, loss=keras.losses.binary_crossentropy, metrics=[binary_accuracy])
日志仍然将 binary_accuracy 打印为标量,这让我很困惑。
keras 对 binary_accuracy 函数的返回有什么特别的吗?
11/300 纪元
0s - 损失:0.4158 - binary_accuracy:0.9308 - val_loss:0.4671 - val_binary_accuracy: 0.7767
【问题讨论】:
-
为什么你认为二进制精度应该返回张量而不是标量?
-
因为函数是以返回张量的方式实现的。将张量转换为标量的步骤隐藏在其他地方。
-
@MatiasValdenegro 根据 binary_accuracy 函数,它应该返回一个 shape=(4,256,256) 的张量(不是标量张量)。我测试它,它是真的。
-
@DanielMöller 当然,但是日志总是会打印一个标量,这让我很困惑。
标签: tensorflow deep-learning keras