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函数的返回做了一些特殊处理?
Epoch 11/300 0s - 损失:0.4158 - binary_accuracy:0.9308 - val_loss:0.4671 - val_binary_accuracy:0.7767
1 回答
这里's what you'正在寻找,在training.py内:
度量函数由
score_array = fn(y_true, y_pred)
调用(它是嵌套函数,fn
在外部函数中定义) . 此数组在最后一行return K.mean(score_array)
中取平均值 . 那是's why you'看到标量指标而不是张量 . 中间的线条只是为了在必要时引入面具和重量 .