如何解决培训期间每班验证的准确性
Keras给出了训练期间的总体pathType: Prefix
和training
准确性。
在训练过程中有没有办法获得validation
?
更新:来自Pycharm的错误日志
per-class validation accuracy
解决方法
使用它来获得每个班级的准确性:
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
class Metrics(keras.callbacks.Callback):
def on_train_begin(self,logs={}):
self._data = []
def on_epoch_end(self,batch,logs={}):
x_test,y_test = self.validation_data[0],self.validation_data[1]
y_predict = np.asarray(model.predict(x_test))
true = np.argmax(y_test,axis=1)
pred = np.argmax(y_predict,axis=1)
cm = confusion_matrix(true,pred)
cm = cm.astype('float') / cm.sum(axis=1)[:,np.newaxis]
self._data.append({
'classLevelaccuracy':cm.diagonal(),})
return
def get_data(self):
return self._data
metrics = Metrics()
history = model.fit(x_train,y_train,epochs=100,validation_data=(x_test,y_test),callbacks=[metrics])
metrics.get_data()
您可以在指标类中更改代码。如你所愿..和这个工作。您只需使用metrics.get_data()
即可获取所有信息。
好吧,准确性是global
的指标,没有per-class accuracy
这样的东西。也许您的意思是proportion of the class correctly identified
,这就是TPR
或recall
的确切定义。
请参阅this和this的答案,有关SO的问题以及来自Cross Validated StackExchange的问题。
,如果您想获得某个类别或一组特定类别的准确性,那么遮罩可能是一个很好的解决方案。看到以下代码:
def cus_accuracy(real,pred):
score = accuracy(real,pred)
mask = tf.math.greater_equal(real,5)
mask = tf.cast(mask,dtype=real.dtype)
score *= mask
mask2 = tf.math.less_equal(real,10)
mask2 = tf.cast(mask2,dtype=real.dtype)
score *= mask2
return tf.reduce_mean(score)
此度量为您提供5至10级的准确性。我用它来度量seq2seq模型中某些单词的准确性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。