为什么要获得火车精度而不是在张量板上测试精度

时间:2018-08-21 04:35:56

标签: python tensorflow tensorboard

我想在张量板上查看测试的准确性,但是看来训练数据可以使准确性提高。我在控制台上打印测试精度,它显示了约70%,但是在张量板上,曲线表明精度在增长,最终接近100%。
这是我的代码:

title

我向张量板添加精度,如下所示: def train_crack_captcha_cnn(is_train, checkpoint_dir): global max_acc X = tf.placeholder(tf.float32, [None, dr.ROWS, dr.COLS, dr.CHANNELS]) Y = tf.placeholder(tf.float32, [None, 1, 1, 2]) output, end_points = resnet_v2_50(X, num_classes = 2) global_steps = tf.Variable(1, trainable=False) learning_rate = tf.train.exponential_decay(0.001, global_steps, 100, 0.9) with tf.device('/device:GPU:0'): loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=Y, logits=output)) # optimizer 为了加快训练 learning_rate应该开始大,然后慢慢衰 optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss, global_step=global_steps) predict = tf.argmax(output, axis = 3) l = tf.argmax(Y, axis = 3) correct_pred = tf.equal(predict, l) accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32)) ## tensorboard tf.summary.scalar('test_accuracy', accuracy) tf.summary.scalar("loss", loss) tf.summary.scalar("learning_rate", learning_rate) saver = tf.train.Saver() with tf.Session(config=tf.ConfigProto(allow_soft_placement = True)) as sess: if is_train: writer = tf.summary.FileWriter("/tmp/cnn_log/log", graph = sess.graph) sess.run(tf.global_variables_initializer()) step_value = sess.run(global_steps) while step_value < 100000: step_value = sess.run(global_steps) merged = tf.summary.merge_all() batch_x, batch_y = get_next_batch() result, _, _loss= sess.run([merged, optimizer, loss], feed_dict={X: batch_x, Y: batch_y}) writer.add_summary(result, step_value) print('step : {} loss : {}'.format(step_value, _loss)) # 每100 step计算一次准确率 if step_value % 20 == 0: acc = sess.run(accuracy, feed_dict={X: validation, Y: validation_labels}) print('accuracy : {}'.format(acc)) # 如果准确率大于max_acc,保存模型,完成训练 if acc > max_acc: max_acc = float(acc) #转换类型防止变为同一个引用 saver.save(sess, checkpoint_dir + "/" + str(step_value) + '-' + str(acc) + "/model.ckpt", global_step=global_steps) ##### predict ##### # predict_y = sess.run(output, feed_dict={X: test}) # data = pd.DataFrame([i for i in range(1, len(predict_y) + 1)], columns = ['id']) # predict_y = np.argmax(predict_y, axis = 3) # predict_y = np.reshape(predict_y,(-1)) # print(predict_y) # predict_y = pd.Series(predict_y, name='label') # data['label'] = predict_y # data.to_csv("gender_submission.csv" + str(step), index=False) ##### end ##### writer.close() else: ckpt = tf.train.get_checkpoint_state(checkpoint_dir) if ckpt and ckpt.model_checkpoint_path: saver.restore(sess, ckpt.model_checkpoint_path) acc = sess.run(accuracy, feed_dict={X: validation, Y: validation_labels}) print('accuracy : {}'.format(acc)) 每隔20步,我就会获得关于测试数据的准确性,并将结果打印到控制台,这与张量板上显示的数据不同。

为什么?

0 个答案:

没有答案