tensorflow遇到的一些问题

  • 问题: 通过tfrecord读取的数据在tensorboard上显示,图片和label不一致

    原因: tfrecord读取是一个batch一个batch进行读取,根据自己设置的缓冲区大小,它会一次性读取缓冲区大小个batch放在缓冲区内。原来的代码在summary.image的时候,label是通过placeholder summary的,而image则是直接传入的从tfrecord里读取到的真值。这样我在sess.run里面,对label的placeholder进行feed,然后再写入summary.writer里。这样就造成了一个问题,就是前面我已经把一个batch的image写进去了,但对应的label没有写进去,在第一个sess.run的时候,我得到一个batch的图片和label,程序就会认为我把这个batch读完了,它会在tfrecord里再读一个batch填满缓冲区,而此时我的label的placeholder还没有赋值,再一次sess.run的时候,tfrecord就会从缓冲区里读取另外一个batch的数据,但只将label进行feed而没有对image进行feed,这样它俩在summary.writer的时候,就不是同一个batch的label和image,这样就造成了在tensorboard上显示的时候,image和label并没有对应起来。解决方法就是tfrecord读取之后,不要summary真值,设置个placeholder,在sess.run的时候再feed数据

    并且很容易的可以看出程序在一次step的时候,其实是读取了2个batch,而不是一个,这是因为我对使用到从tfrecord里读出的数据sess run 了两次,这也能解释了为什么原来的程序运行次数总是设置的次数的一半,运行step为一半时终止的原因。

  • 问题:You must feed a value for placeholder tensor ‘Placeholder’ with dtype float and shape
    一开始是怀疑没有往placeholder里传入正确的数据,经检验是没有任何问题的,出现这个问题的原因是在于我们对placeholder表示的tensor进行了summary,但feed数据的时候,没有将feed和merge_op sess run一起。简单来讲,一般会在程序里定义一个merge_op = tf.summary.merge_all(),并且进行sess run。问题就在这,如果merge_op没有和其merge的tensor feed在一起sess run的话,程序会认为placeholder没有数据,就会报上面的这种错误。正确的做法就是将feed数据和merge合在一起sess run。

  • BN层参数的保存问题
    tensorflow模型保存部分,其中一次训练结果没有正确的把bn层的moving_mean 和 moving_var保存下来,但同样的代码在前面的训练过程中是可以正确保存的,经过一天的debug之后,同样的代码居然又可以了,这是最奇怪的一部分,因为根本不知道错在哪。有一个加上保险的解决方法就是在save的时候指定var_list,把网络的权重、偏差、bn层的gamma、beta、moving_mean和moving_var都存在一个var_list里面,指定保存。但这样一些变量如step、learning rate等等没法保存下来, 类似于这样:

      var_list = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)
      global_list = tf.global_variables()
      bn_vars = [g for g in global_list if 'moving_mean' in g.name]
      bn_vars += [g for g in global_list if 'moving_variance' in g.name]
      saver = tf.train.Saver(var_list = bn_vars + var_list)
    

仅使用cpu运行程序
电脑上安装了tensorflow-gpu版本,在想只使用电脑的cpu运行程序的时候,仅仅将所有的代码写在with tf.device('\cpu:0')是不行的, 程序还是会寻找电脑里已有的gpu信息和cuda信息.若是想完全屏蔽掉gpucuda, 需要加入这两行代码:import osos.environ['CUDA_VISIBLE_DEVICES'] = '-1'.这样程序才会完全仅使用cpu运行.

tensorflow目前不支持cuda10, 仅支持cuda 9.0, 不然安装好cuda10后import tensorflow会出现Failed to load the native TensorFlow runtime.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值