近日在跑densenet,发现训练集和测试集的准确率相差甚远:
须知这是个二分类问题,晕........
再三检查代码,甚至将刚训练过的数据再喂进去跑,准确率竟然很低,至此检查到training_flag的问题,将问题锁定到batch_norm函数上! 罪魁祸首:tf.contrib.layers.batch_norm!!!
因为batch_norm 在test的时候,用的是固定的mean和var, 而这个固定的mean和var是通过训练过程中对mean和var进行移动平均得到的。而直接使用train_op会使得模型没有计算mean和var,因此正确的方式是: