常⽤评估函数和⾃定义评估函数
常⽤评估函数和⾃定义评估函数
1.
2.
3.
⼀常⽤评估函数
ics (tf.metrics的接⼝均移到这⾥)
ics.BinaryAccuracy
ics.binary_accuracy
有什么区别?
前者是类的实现形式,后者是函数的实现形式。
ics.MeanAbsoluteError(平⽅差误差,⽤于回归,可以简写为MSE,函数形式为mse)
ics.MeanAbsoluteError(绝对值误差,⽤于回归,可以简写为MAE,函数形式为mae)
ics.MeanAbsolutePercentageError(平均百分⽐误差,⽤于回归,可以简写为MAPE,函数形式为mape)
ics.RootMeanSquaredError(均⽅根误差,⽤于回归)。
ics.Accuracy(准确率,⽤于分类,可以⽤字符串"Accuracy"表⽰,Accuracy=(TP+TN)/(TP+TN+FP+FN),要求y_true和y_pred都为类别序号编码)
ics.AUC(ROC曲线(TPR vs FPR)下的⾯积,⽤于⼆分类,直观解释为随机抽取⼀个正样本和⼀个负样本,正样本的预测值⼤于负样本的概率)
ics.Precision(精确率,⽤于⼆分类,Precision = TP/(TP+FP))
ics.Recall(召回率,⽤于⼆分类,Recall = TP/(TP+FN))weight的所有形式
ics.TopKCategoricalAccuracy(多分类TopK准确率,要求y_true(label)为onehot编码形式)
ics.CategoricalAccuracy(分类准确率,与Accuracy含义相同,要求y_true(label)为onehot编码形式)
ics.SparseCategoricalAccuracy(稀疏分类准确率,与Accuracy含义相同,要求y_true(label)为序号编码形式)
import tensorflow as tf
# 评估函数使⽤原理
m=ics.Accuracy()
m.update_state([1,2,3,4],[0,2,3,4])
print('Final result: ',m.result().numpy())
# Final result: 0.75
m.update_state([1,2,3,4],[0,2,3,1])
print('Final result: ',m.result().numpy())
m=ics.Accuracy()
m([1,2,3,4],[0,2,3,4])
print('Final result: ',m.result().numpy())
# Final result: 0.75
m([1,2,3,4],[0,2,3,1])
print('Final result: ',m.result().numpy())
m.update_state([1,2,3,4],[0,2,3,4])
print('Final result: ',m.result().numpy())
⼆⾃定义评估函数
两种实现形式: 基于类的实现和基于函数的实现
⼤部分使⽤基于类的实现
⾃定义损失函数:
⾃定义评估指标需要继承ics.Metric类,并重写__init__、update_state和result 三个⽅法。update_state():对状态变量进⾏所有更新
result():根据状态变量计算并返回指标值。
__init__():所有状态变量都应通过以下⽅法在此⽅法中创建self.add_weight()
⾃定义评估函数
class SparseCategoricalAccuracy_(ics.Metric):
def__init__(self, name='SparseCategoricalAccuracy',**kwargs):
super(SparseCategoricalAccuracy_, self).__init__(name=name,**kwargs)
def update_state(self, y_true, y_pred,sample_weight=None):
values = tf.cast(tf.equal(y_true, tf.argmax(y_pred, axis=-1, output_type=tf.int32)), tf.int32)
def result(self):
unt / al
def reset_states(self):
# The state of the metric will be reset at the start of each epoch.
s = SparseCategoricalAccuracy_()
# s.reset_states()
s.update_stant([2,1]), tf.constant([[0.1,0.9,0.8],[0.05,0.95,0]])) print('Final result: ', s.result().numpy())# Final result: 0.5
m = ics.SparseCategoricalAccuracy()
m.update_state([2,1],[[0.1,0.9,0.8],[0.05,0.95,0]])
print('Final result: ', m.result().numpy())# Final result: 0.5
class CatgoricalTruePositives(ics.Metric):
def__init__(self, name='categorical_true_positives',**kwargs):
super(CatgoricalTruePositives, self).__init__(name=name,**kwargs) ue_positives = self.add_weight(name='tp', initializer='zeros')
def update_state(self, y_true, y_pred, sample_weight=None):
y_pred = tf.argmax(y_pred,axis=-1)
values = tf.equal(tf.cast(y_true,'int32'), tf.cast(y_pred,'int32'))
values = tf.cast(values,'float32')
if sample_weight is not None:
sample_weight = tf.cast(sample_weight,'float32')
values = tf.multiply(values, sample_weight)
def result(self):
ue_positives
def reset_states(self):
# The state of the metric will be reset at the start of each epoch.
y_pred = tf.nn.softmax(tf.random.uniform((4,3)))
tf.argmax(y_pred,axis=-1)
y_true = tf.constant([2,0,0,0])
m=CatgoricalTruePositives()
m.update_state(y_true,y_pred)
print('Final result: ',m.result().numpy())
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论