tensorflow本人智障错误汇总

xiaoxiao2021-02-28  49

1:安装GPU-tensorflow那些坑:

    详见我的另一篇因为中文输入法崩溃掉而写的英文博文。

2:tf.slice

     tf.slice可以给我们返回一个切成的slice的列表,别被官方文档的例子迷惑了

3:legacy_seq2seq的输入

    要输入一个list, list里面都是长度为batch的一维tensor, 所以记得给placeholder切片。

4:   Dst tensor is not initialized.

    This is a common bug while training on a public SVM, and it's cause is that your GPU doesn't have enough memory for you. So if you're a user of NVIDIA-gpu, use the command  " nvidia-smi " to check what's happening in your GPU.

5:  手动指定GPU之后意外小规模地使用了其他GPU

    原因:以指定在gpu6上计算为例。使用tf.device("/gpu:6")只是保证tensorflow只使用gpu6计算,其他gpu还是会按照规定的使用率(默认是占满)去占

    解决方法是再手动指定一下可见设备,这样就强硬地解决了这个问题。

    代码:在引用了os库之后      os.environ["CUDA_VISIBLE_DEVICES"] = "6"

                 或是在运行前,在终端使用cuda的命令设置变量:CUDA_VISIBLE_DEVICES=0 python xxx.py

   其中xxx.py就是你要执行的python脚本的文件名

6:有关循环

    在构图的时候永远也不要用for循环,否则Tensorflow的拓扑排序会失败:它不知道什么顺序什么时候究竟发生了什么,以及变量复用可能带来的一系列情况,使得计算图出现有向环,拓扑排序失败。

    解决办法:使用tf.while_loop()函数,要特别注意的是千万千万避免出现以下情况:A在cond和body之前定义,在cond和body里面又调用一次,然后在cond和body之后再用,这样会报错:A在循环中。此外,还要注意的是循环的变量默认形状是不能变的,若要变化需要在while_loop()参数中指定一个更为宽松的形状条件,比如A在两次循环中维度为[10, 20], [10, 30],之后都是第二个元素在变,那么就将A的形状指定为[10, None]就完事大吉了

 

 

转载请注明原文地址: https://www.6miu.com/read-2623537.html

最新回复(0)