3 回答

TA貢獻1840條經驗 獲得超5個贊
使用它來獲得每類準確性:
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()獲取所有信息..

TA貢獻1858條經驗 獲得超8個贊
好吧,準確性是一個global
指標,沒有per-class accuracy
.?也許你的意思是,這就是orproportion of the class correctly identified
的確切定義。TPR
recall

TA貢獻1828條經驗 獲得超3個贊
如果您想獲得某個類別或一組特定類別的準確性,掩碼可能是一個很好的解決方案。看這段代碼:
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 模型中某些單詞的準確度。
添加回答
舉報