0
点赞
收藏
分享

微信扫一扫

【二】tensorflow调试报错、TF深度学习强化学习教学 解决使用 plt.savefig 保存图片时一片空白


相关文章

​​【一】tensorflow安装、常用python镜像源、tensorflow 深度学习强化学习教学​​        

​​【二】tensorflow调试报错、tensorflow 深度学习强化学习教学​​

​​【三】tensorboard安装、使用教学以及遇到的问题​​

​​【四】超级快速pytorch安装​​

​​trick1---实现tensorflow和pytorch迁移环境教学​​

 1. tensorflow 深度学习

【二】tensorflow调试报错、TF深度学习强化学习教学 解决使用 plt.savefig 保存图片时一片空白_机器学习      书本链接:​​javascript:void(0)">​javascript:void(0)​​

对应码源以及学习资料链接:​​https://gitee.com/dingding962285595/tensorflow_-rl​​    ​欢迎关注一键三连哦!

【二】tensorflow调试报错、TF深度学习强化学习教学 解决使用 plt.savefig 保存图片时一片空白_tensorflow_02【二】tensorflow调试报错、TF深度学习强化学习教学 解决使用 plt.savefig 保存图片时一片空白_人工智能_03   【二】tensorflow调试报错、TF深度学习强化学习教学 解决使用 plt.savefig 保存图片时一片空白_python_04


2. 常见遇到问题

2.1 版本兼容性问题导致代码运行出错

  • 在2.x版本运行1.x版本程序

      这句命令使tf2.1版本可以在1.1程序下运行

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
tf.compat.v1.disable_eager_execution()#这句话可有可无


2.2 tensorboard显示问题

1.首先进入tf2的环境下(这里才安装了)----conda的命令行

2.打开对应路径:比如进入D盘  d:就可以不用cd

3.进入d盘路径后,再cd D:\work_place

4.复制地址到  http://localhost:6006/



  • 编译执行,会生成log文件
  • 找到log文件(在F:\Python_Project\tensorflow_2\logs文件夹下)
  •  tensorboard --logdir=logs    ->其中logs为保存log文件的文件夹


2.3 程序调试遇到问题

  • TensorFlow二进制文件没有被编译,你的CPU支持AVX扩展,但是你安装的TensorFlow版本无法编译使用

那为什么会出现这种警告呢?

    由于tensorflow默认分布是在没有CPU扩展的情况下构建的,例如SSE4.1,SSE4.2,AVX,AVX2,FMA等。默认版本(来自pip install tensorflow的版本)旨在与尽可能多的CPU兼容。另一个观点是,即使使用这些扩展名,CPU的速度也要比GPU慢很多,并且期望在GPU上执行中型和大型机器学习培训。

tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2

在这种情况下,您可以简单地忽略此警告:

import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'



tf报错整合​---别人博客【转载-----有遇到问题可以去这个博主那里看看】

​javascript:void(0)">​javascript:void(0)​​

2.4 语法问题


  •  解决使用 plt.savefig 保存图片时一片空白
  • 当使用如下代码保存使用 ​​plt.savefig​​ 保存生成的图片时,结果打开生成的图片却是一片空白

import matplotlib.pyplot as plt """ 一些画图代码 """ plt.show() plt.savefig("filename.png")

原因:在 ​​plt.show()​​​ 后调用了 ​​plt.savefig()​​​ ,在 ​​plt.show()​​​ 后实际上已经创建了一个新的空白的图片(坐标轴),这时候你再 ​​plt.savefig()​​ 就会保存这个新生成的空白图片。

解决:​在 ​​plt.show()​​​ 之前调用 ​​plt.savefig()​​;

import matplotlib.pyplot as plt """ 一些画图代码 """ plt.savefig("filename.png") plt.show()

画图的时候获取当前图像

# gcf: Get Current Figure fig = plt.gcf() plt.show() fig1.savefig('xxx.png', dpi=50)

  •  module 'tensorflow' has no attribute 'random_normal'


解决办法:tf2.0里改名字了,用tf.random.uniform代替


  • module 'tensorflow._api.v2.train' has no attribute 'AdamOptimizer'

model.compile(optimizer = tf.train.AdamOptimizer(), loss = 'sparse_categorical_crossentropy', metrics=['accuracy'])

会出错修改为下面:

model.compile(optimizer = tf.optimizers.Adam(), loss = 'sparse_categorical_crossentropy', metrics=['accuracy'])

或者:

model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics=['accuracy'])

  • ​​TypeError: minimize() missing 1 required positional argument: 'var_list'​​


错误程序:

# Note, minimize() knows to modify W and b because Variable objects are trainable=True by default #optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) optimizer = tf.optimizers.SGD(name='SGD').minimize(cost) #optimizer = tf.SGD(learning_rate).minimize(cost) # Initialize the variables (i.e. assign their default value) init = tf.global_variables_initializer()

修改:需要给定权重系数w,b

optimizer = tf.optimizers.SGD(name='SGD').minimize(cost,var_list=[W,b])

  • SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: tr


解决:

demo:

sys.path.append('c:\Users\mshacxiang\VScode_project\web_ddt')

原因分析:​在windows系统当中读取文件路径可以使用\,但是在python字符串中\有转义的含义,如\t可代表TAB,\n代表换行,所以我们需要采取一些方式使得\不被解读为转义字符。目前有3个​解决方案

  • 在路径前面加r,即保持字符原始值的意思。

sys.path.append(r'c:\Users\mshacxiang\VScode_project\web_ddt')

  • 2、替换为双反斜杠

sys.path.append('c:\\Users\\mshacxiang\\VScode_project\\web_ddt')

  • 替换为正斜杠

sys.path.append('c:/Users/mshacxiang/VScode_project/web_ddt')

  • AttributeError: module 'tensorflow' has no attribute 'merge_all_summaries'


原因:由于不同的TensorFlow版本之间某些函数的用法引起的错误,属性错误:模块“tensorflow”没有“merge_all_summaries”属性

解决:将 tf.merge_all_summaries()改为 ​tf.summary.merge_all()


  •  “ImportError DLL load failed 找不到指定的程序”


原因:ImportError DLL load failed的报错,编写代码时不报错(比如ModuleNotFoundError: No module named 'XXX'下,在pycharm中写import XXX会标红),运行的时候才报错。

这说明你这个包,是在默认的搜索路径下的。由于你这个包有问题,才导致写的时候不报错,运行的时候才报错。

主要原因是:函数库调用其依赖库时出现了问题

import sklearn import seaborn

​sklearn​​​和​​seaborn​​​这两个库都有依赖库。比如​​sklearn​​​的依赖库有​​numpy​​​, ​​scipy​​​和​​joblib​​。

问题:


  • 函数库本身有问题,导致调用异常。
  • 依赖包版本不符,导致调用异常。

解决方法:


  • 重新安装该函数库。
  • 检查依赖包的版本(​过高或过低​)。

常见的是python3完全不兼容python2,另一个表现是,第三方库都有dependencies,要求某些库的版本>=某个版本。但是居然还会有向上不兼容的问题,即依赖包版本过高,会导致依赖这个包的第三方库无法正常使用。

查看依赖库信息

有两种方式

  • 通过命令行查看:​​conda search package_name --info​​比如查看​​seaborn​​的信息,在命令行输入​​conda search seaborn --info​​,可以查看​​seaborn​​各版本的信息(包括依赖包的信息):

seaborn 0.11.1 pyhd3eb1b0_0 --------------------------- file name : seaborn-0.11.1-pyhd3eb1b0_0.conda name : seaborn version : 0.11.1 build : pyhd3eb1b0_0 build number: 0 size : 212 KB license : BSD 3-Clause subdir : noarch url : https://repo.anaconda.com/pkgs/main/noarch/seaborn-0.11.1-pyhd3eb1b0_0.conda md5 : ffbd2d692d2acdc84f2cdbd2c66d1098 timestamp : 2020-12-21 19:23:03 UTC dependencies: - matplotlib >=2.1.2 - numpy >=1.13.3 - pandas >=0.22.0 - python >=3.6 - scipy >=1.0.1

转自:​javascript:void(0)">​javascript:void(0)​​

可见pycharm会使用Anaconda路径下的函数库(‘E:\Anaconda\lib’),命令行运行的时候会使用Python37路径下的函数库(‘E:\Python37\lib’)。

也就是说,如果我用Python37路径下的相关函数库,去替代Anaconda路径下的相关函数库,那么在pycharm中就可以正常运行了。

这之后我用Python37路径下sklearn的文件夹,替换了Anaconda路径下sklearn的文件夹,发现还是一样的报错信息。

然后我就怀疑是不是依赖包的的版本问题,导致了ImportError 的出现。之后我通过_version_()函数打印了两个路径下,sklearn的依赖包的版本

#python37 sklearn: 0.21.3 numpy: 1.15.3 scipy: 1.3.0 joblib: 0.13.2 #acaconda import sklearn sklearn.__version__ Out[4]: '0.21.3' numpy: 1.16.2 scipy: 1.2.1 joblib: 0.13.2

然后,我就把Anaconda下的numpy库从1.16.2降级到1.15.3。

即在命令行里输入conda install numpy=1.15.3 (pip的命令是pip install numpy==1.15.3,但是路径不是 Anaconda的路径了,还得改路径)。

然后发现成功了!!!sklearn和seaborn都解决了!!!居然是numpy这个第三方库向上不兼容的问题(活久见系列)。

最后Anaconda路径下,依赖包的版本:

sklearn: 0.21.3 numpy: 1.15.3 scipy: 1.1.0 joblib: 0.13.2

源代码:

import sys,os # curPath = os.path.abspath(os.path.dirname(__file__)) # print(sys.path) # # print(os.path.dirname(__file__)) # # print(curPath) # # rootPath = os.path.split(curPath)[0] # # print(os.path.split(curPath)) # # print(rootPath) # # sys.path.append(rootPath) sys.path.append('E:\\Anaconda\\lib\\site-packages\\') # # sys.path = ['C:\\Users\\73416\\PycharmProjects\\HSIproject', 'E:\\Python37\\python37.zip', 'E:\\Python37\\DLLs', 'E:\\Python37\\lib', 'E:\\Python37', 'E:\\Python37\\lib\\site-packages', 'E:\\Python37\\lib\\site-packages\\win32', 'E:\\Python37\\lib\\site-packages\\win32\\lib', 'E:\\Python37\\lib\\site-packages\\Pythonwin', 'E:\\Anaconda\\lib\\site-packages\\'] print(sys.path) # from utils import open_file import sklearn import numpy import scipy import joblib import seaborn print('sklearn:',sklearn.__version__) print('numpy:',numpy.__version__) print('scipy:',scipy.__version__) print('joblib:',joblib.__version__) print('done!')



举报

相关推荐

0 条评论