当损失减少时,转换精度不会改变

时间:2017-08-22 06:40:51

标签: machine-learning tensorflow conv-neural-network

我正在训练几个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表示它是否正在训练或测试批次规范层。 请注意,我尝试使用训练集计算准确度,从而导致最小的损失。然而,它给出了同样差的准确性。请帮帮我,我真的很感激!

0 个答案:

没有答案