花了两天时间研究tfrecords,错在最原始的地方是最难找的bug
1.tf.train.string_input_producer([filename],num_epochs=100)
num_epochs=None时 默认无限循环
设置num_epochs注意
init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
self.sess.run(init_op)
2.error:
tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape is a tensor with 50176 values, but the requested shape has 150528
[[{{node Reshape}} = Reshape[T=DT_UINT8, Tshape=DT_INT32, _device="/job:localhost/replica:0/task:0/device:CPU:0"](DecodeRaw, Reshape/shape)]]
经过N次测试得到的结论:
图片本身的原因导致无法reshape
3.读取tfrecord数据训练时打乱得不充分,
min_after_dequeue 越大随机效果越好但会占用更多的时间和内存,capacity 必须比 min_after_dequeue 大,建议capacity的取值:min_after_dequeue + (num_threads + a small safety margin) * batch_size
4.遇到bug:多分类或者二分类训练的模型预测结果都预测成某一类,为了验证模型是否有问题,所以拿训练时候的val的tfrecord数据来验证,之前读取tfrecord文件时候,总是要初始化,不然无法读取报错,
init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
self.sess.run(init_op)
就会出现用restore的模型预测的准确率没有之前训练时候的高,训练时候0.94±,现在0.46±,把初始化给注释掉(我也觉得不应该初始化)就恢复训练时候的准确率了.由此可得,训练时候的模型是ok的,做单张图片预测的准确率都预测成某一类确实是我预测脚本的问题,具体问题待查.