Такое поведение ожидается, если вы сбрасываете метрики между тренировками.Метрики поезда не усугубляют метрики проверки, если они являются двумя различными операциями.Я приведу пример того, как сохранить эти метрики разными и как сбросить только один из них.
Игрушка Пример:
logits = tf.placeholder(tf.int64, [2,3])
labels = tf.Variable([[0, 1, 0], [1, 0, 1]])
#create two different ops
with tf.name_scope('train'):
train_acc, train_acc_op = tf.metrics.accuracy(labels=tf.argmax(labels, 1),
predictions=tf.argmax(logits,1))
with tf.name_scope('valid'):
valid_acc, valid_acc_op = tf.metrics.accuracy(labels=tf.argmax(labels, 1),
predictions=tf.argmax(logits,1))
Обучение:
#initialize the local variables has it holds the variables used for metrics calculation.
sess.run(tf.local_variables_initializer())
sess.run(tf.global_variables_initializer())
# initial state
print(sess.run(train_acc, {logits:[[0,1,0],[1,0,1]]}))
print(sess.run(valid_acc, {logits:[[0,1,0],[1,0,1]]}))
#0.0
#0.0
Начальные состояния 0.0
, как и ожидалось.
Теперь вызов метрик обучения:
#training loop
for _ in range(10):
sess.run(train_acc_op, {logits:[[0,1,0],[1,0,1]]})
print(sess.run(train_acc, {logits:[[0,1,0],[1,0,1]]}))
# 1.0
print(sess.run(valid_acc, {logits:[[0,1,0],[1,0,1]]}))
# 0.0
ТолькоОбновлена точность обучения, в то время как действительная точность все еще составляет 0.0
.Вызов действительных операций:
for _ in range(10):
sess.run(valid_acc_op, {logits:[[0,1,0],[0,1,0]]})
print(sess.run(valid_acc, {logits:[[0,1,0],[1,0,1]]}))
#0.5
print(sess.run(train_acc, {logits:[[0,1,0],[1,0,1]]}))
#1.0
Здесь действительная точность обновляется до нового значения, в то время как точность обучения остается неизменной.
Позволяет сбросить только операции проверки:
stream_vars_valid = [v for v in tf.local_variables() if 'valid/' in v.name]
sess.run(tf.variables_initializer(stream_vars_valid))
print(sess.run(valid_acc, {logits:[[0,1,0],[1,0,1]]}))
#0.0
print(sess.run(train_acc, {logits:[[0,1,0],[1,0,1]]}))
#1.0
Действительная точность вернулась к нулю, в то время как точность обучения осталась неизменной.