Plot 报告每个类度量
我正在使用Tensorflow/Keras来训练CNN。我已经为我的问题定义了一个自定义指标。在这个过程中,我会收到如下报告:Plot 报告每个类度量,plot,keras,metrics,Plot,Keras,Metrics,我正在使用Tensorflow/Keras来训练CNN。我已经为我的问题定义了一个自定义指标。在这个过程中,我会收到如下报告: Epoch 3/2000 57/57 - 3s - loss: 244231.4060 - custom_metric: 0.6170 - val_loss: 364119.8415 - val_custom_metric: 0.5506 这是一个具有3个输出的回归问题。我是否可以分别从每个类中获取这些度量报告 我在一篇论文中看到,作者使用了二进制精度作为衡量标准,他
Epoch 3/2000
57/57 - 3s - loss: 244231.4060 - custom_metric: 0.6170 - val_loss: 364119.8415 - val_custom_metric: 0.5506
这是一个具有3个输出的回归问题。我是否可以分别从每个类中获取这些度量报告
我在一篇论文中看到,作者使用了二进制精度作为衡量标准,他还使用了TF/Keras,甚至在一张图表中绘制了所有时代的这些值
这是我定义的自定义指标,其中Yclasses=3
和batch\u size=16
:
def custom_metric(y_true, y_pred):
truepotventolow = K.cast(K.less_equal(y_true[0:batch_size,0], 4000), 'int8')
predpotventolow = K.cast(K.less_equal(y_pred[0:batch_size,0], 4000), 'int8')
potventolow = K.sum(truepotventolow*predpotventolow)
truepotventomed = K.cast(K.greater(y_true[0:batch_size,0], 4000) & K.less_equal(y_true[0:batch_size,0], 8500), 'int8')
predpotventomed = K.cast(K.greater(y_pred[0:batch_size,0], 4000) & K.less_equal(y_pred[0:batch_size,0], 8500), 'int8')
potventomed = K.sum(truepotventomed*predpotventomed)
truepotventohigh = K.cast(K.greater(y_true[0:batch_size,0], 8500), 'int8')
predpotventohigh = K.cast(K.greater(y_pred[0:batch_size,0], 8500), 'int8')
potventohigh = K.sum(truepotventohigh*predpotventohigh)
truedesvpadlow = K.cast(K.less_equal(y_true[0:batch_size,1], 1150), 'int8')
preddesvpadlow = K.cast(K.less_equal(y_pred[0:batch_size,1], 1150), 'int8')
desvpadlow = K.sum(truedesvpadlow*preddesvpadlow)
truedesvpadmed = K.cast(K.greater(y_true[0:batch_size,1], 1150) & K.less_equal(y_true[0:batch_size,1], 2300), 'int8')
preddesvpadmed = K.cast(K.greater(y_pred[0:batch_size,1], 1150) & K.less_equal(y_pred[0:batch_size,1], 2300), 'int8')
desvpadmed = K.sum(truedesvpadmed*preddesvpadmed)
truedesvpadhigh = K.cast(K.greater(y_true[0:batch_size,1], 2300), 'int8')
preddesvpadhigh = K.cast(K.greater(y_pred[0:batch_size,1], 2300), 'int8')
desvpadhigh = K.sum(truedesvpadhigh*preddesvpadhigh)
truewlslow = K.cast(K.less_equal(y_true[0:batch_size,2], 0.075), 'int8')
predwlslow = K.cast(K.less_equal(y_pred[0:batch_size,2], 0.075), 'int8')
wlslow = K.sum(truewlslow*predwlslow)
truewlshigh = K.cast(K.greater(y_true[0:batch_size,2], 0.075), 'int8')
predwlshigh = K.cast(K.greater(y_pred[0:batch_size,2], 0.075), 'int8')
wlshigh = K.sum(truewlshigh*predwlshigh)
return (potventolow+potventomed+potventohigh+desvpadlow+desvpadmed+desvpadhigh+wlslow+wlshigh)/(batch_size*Yclasses)
您应该定义一个自定义度量:
def custom_metric(y_true, y_pred):
return (
keras.metrics.binary_accuracy(y_true[:, 0], y_pred[:, 0], threshold=0.5),
keras.metrics.binary_accuracy(y_true[:, 1], y_pred[:, 1], threshold=0.5),
keras.metrics.binary_accuracy(y_true[:, 2], y_pred[:, 2], threshold=0.5)
)
然后可以在编译时将其传递给模型:
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy', custom_metric])
您应该定义一个自定义度量:
def custom_metric(y_true, y_pred):
return (
keras.metrics.binary_accuracy(y_true[:, 0], y_pred[:, 0], threshold=0.5),
keras.metrics.binary_accuracy(y_true[:, 1], y_pred[:, 1], threshold=0.5),
keras.metrics.binary_accuracy(y_true[:, 2], y_pred[:, 2], threshold=0.5)
)
然后可以在编译时将其传递给模型:
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy', custom_metric])
见下面我的答案。注意:由于您没有提供任何代码或数据,我无法对其进行测试,所以请进行测试并提供检查结果。您好@Geeocode。谢谢你的回复。我已经用自定义的metric.Hello编辑了这个主题。第一。不要使用batchsize
,因为您的度量将在历代结束时使用,在历代结束时将对整个数据集进行评估。您使用的是单独的类,但返回它们的计算方法。这是你的真实意图吗?对不起,我说错了,我的意思是每批使用一个指标,但评估通过所有数据点。是的,只需:
,并且在返回时
不带批量大小
。你说的是不同的大小,但如果我看得清楚的话,你指的是轴0处的不同大小,这意味着你有相同的大小,即相同的类,但你有更有效的数据,这是正常的,对返回的形式没有影响。无论如何,请测试它,如果你有你需要的结果,请接受我的答案。我明白了,谢谢你的帮助。我接受你的答案,它帮助我定义了我想要的度量标准。见下面我的答案。注意:由于您没有提供任何代码或数据,我无法对其进行测试,所以请进行测试并提供检查结果。您好@Geeocode。谢谢你的回复。我已经用自定义的metric.Hello编辑了这个主题。第一。不要使用batchsize
,因为您的度量将在历代结束时使用,在历代结束时将对整个数据集进行评估。您使用的是单独的类,但返回它们的计算方法。这是你的真实意图吗?对不起,我说错了,我的意思是每批使用一个指标,但评估通过所有数据点。是的,只需:
,并且在返回时
不带批量大小
。你说的是不同的大小,但如果我看得清楚的话,你指的是轴0处的不同大小,这意味着你有相同的大小,即相同的类,但你有更有效的数据,这是正常的,对返回的形式没有影响。无论如何,请测试它,如果你有你需要的结果,请接受我的答案。我明白了,谢谢你的帮助。我接受你的回答,它帮助我定义了我想要的度量标准。