如果您在两次培训之间重置指标,则可能会出现此现象。如果训练指标是两个不同的 *** 作,则它们不会合并验证指标。我将举一个示例,说明如何保持这些指标不同,以及如何仅重置其中一个。
玩具示例:
logits = tf.placeholder(tf.int64, [2,3])labels = tf.Variable([[0, 1, 0], [1, 0, 1]])#create two different opswith 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 stateprint(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 loopfor _ 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.0print(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.5print(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.0print(sess.run(train_acc, {logits:[[0,1,0],[1,0,1]]}))#1.0
有效精度重置为零,而训练精度保持不变。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)