我正在训练几个CNN在TensorFlow中进行图像分类。训练损失正常减少。然而,在整个训练过程中测试精度从未改变,加上精度非常低(0.014),其中随机猜测的准确度为0.003(大约有300个类)。我注意到的一件事是,只有那些我应用批量规范的模型才能表现出如此奇怪的行为。造成这个问题可能有什么问题?训练集有80000个样本,以防您可能认为这是由于过度拟合造成的。以下是评估代码的一部分:
准确度函数:
correct_prediction = tf.equal(tf.argmax(Model(test_image), 1), tf.argmax(test_image_label, 0))
accuracy = tf.cast(correct_prediction, tf.float32)
test_image
是一个只包含一个样本的批处理,而test_image_label
是一个标量。
会话:
with tf.Session() as sess:
sess.run(tf.local_variables_initializer())
sess.run(tf.global_variables_initializer())
saver = tf.train.Saver()
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord, start=True)
print('variables initialized')
step = 0
for epoch in range(epochs):
sess.run(enqueue_train)
print('epoch: %d' %epoch)
if epoch % 5 == 0:
save_path = saver.save(sess, savedir + "/Model")
for batch in range(num_batch):
if step % 400 == 0:
summary_str = cost_summary.eval(feed_dict={phase: True})
file_writer.add_summary(summary_str, step)
else:
sess.run(train_step, feed_dict={phase: True})
step += 1
sess.run(train_close)
sess.run(enqueue_test)
accuracy_vector = []
for num in range(len(testnames)):
accuracy_vector.append(sess.run(accuracy, feed_dict={phase: False}))
mean_accuracy = sess.run(tf.divide(tf.add_n(accuracy_vector), len(testnames)))
print("test accuracy %g"%mean_accuracy)
sess.run(test_close)
save_path = saver.save(sess, savedir + "/Model_final")
coord.request_stop()
coord.join(threads)
file_writer.close()
上面的phase
表示它是否正在训练或测试批次规范层。
请注意,我尝试使用训练集计算准确度,从而导致最小的损失。然而,它给出了同样差的准确性。请帮帮我,我真的很感激!