关于 session | saver.restore|resnet

bug.1:
训练出来的模型在训练的时候出现对同一个数据集训练,但数据的排列顺序不一样,预测的结果不一样。
bug怀疑:
使用模型预测的时候,模型restore时候,自己又初始化了一遍参数,影响预测效果

bug.2:
Tensor(“cost/Const:0”, shape=(1,), dtype=int32) must be from the same graph as Tensor(“softmax_cross_entropy_with_logits/Reshape_2:0”, shape=(?,), dtype=float32).
bug怀疑:
前面定义的参数没有放到sess里面,使得定义无效,使用默认定义的sess

bug.3:
FailedPreconditionError (see above for traceback): Attempting to use uninitialized value resnet_v2_50/logits/weights_1
bug定位:
如需自己再定义一遍神经网络层,如:
net, end_points = resnet_v2_50(self.input_x, num_classes=self.num_classes)
需要将其放在sess前,并sess.run(tf.global_variables_initializer())初始化一遍,
再saver.restore(sess, self.checkpoint_file)模型。

bug.4:
ResNet每次预测结果都不一样
据github的issue以及博客上有提到是batch_norm的问题,需要设置arg_scope = resnet_arg_scope(is_training=False)
但是得到的结果如下图,都是预测为同一类.
在这里插入图片描述
当把batch_size设置为1时候,预测结果如下图
在这里插入图片描述
只要batch_size大于1,得到的预测结果就相对于正常,如下图,batch预测结果正常,单张预测如框框里的,
在这里插入图片描述
之前一直怀疑自己的单张预测脚本有问题,直到发现别人也一样,而且设置is_training=False并不管用,原因待日后分析,而我的目标是预测单张图片作为展示,为了解决燃眉之急,于是就开启我的骚操作了,操作:先读入个batch的数据,不为1就对了,可以选择预测结果较为靠谱的,这里选择batch_size=32,然后用读入的单张数据替换最后一张,最后也是作为一个batch进行预测,得到的结果就正常了,每次都是替换最后一张,结果只取最后一张就ok.目前没有想到更好的解决办法,先这么着吧.

bug.5:
脚本加载配置文件时候一直卡在那里也不报错也不往下走,经过一步步设置断点测试,终于发现是sess.run读取tfrecord数据时候那一行一直过不去,然后发现通过sess启动加载tfrecord文件时,文件是空的这竟然不报错也不往下走也不退出,终于找到过不去的坎了。

bug6:
使用bug4解决的单张预测问题,需要选一个batch分布平均且充分shuffle的,如果像
[1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 2 2 2]的batch这就导致预测结果只会出现1和2,还有其他类没有出现,而且不准确。
如果像[0 2 0 0 0 2 1 0 0 2 1 0 2 0 0 1 2 0 1 0 0 0 2 2 0 0 0 2 0 2 1 2 0 2 0 0 2 0 0 1 2 2 0 0 0 2 0 2 0 0] batch_size大使得shuffle更充分些,这样预测的效果会更好些。也可以在加载模型前,看分布情况,再觉得是否保留这个batch作为当作的batch。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值