tensorflow1.0和tensorflow2.0的区别主要是1.0用的静态图
一般情况1.0已经足够,但是如果要进行深度神经网络的训练,当然还是tensorflow2.*-gpu比较快啦。
其中tensorflow有CPU和GPU两个版本(2.0安装方法),
CPU安装比较简单:
pip install tensorflow-cpu
一、查看显卡
日常CPU足够,想用GPU版本,要有NVIDIA的显卡,查看显卡方式如下:

二、查看版本对应关系
然后我们需要去下载NVIDIA驱动CUDA以及支持神经网络训练的CUDNN模块:(重点,其中需要查看自己NVIDIA版本 Python版本 CUDNN版本是否匹配)

下载CUDA:https://developer.nvidia.com/cuda-11.3.0-download-archive
三、安装cudnn
CUDA安装完毕后,需要安装支持神经网络训练的CUDNN模块,下载 cuDNN,下载之前需要先注册一下 Nvidia 的账号,下载地址为:https://developer.nvidia.com/rdp/cudnn-download
下载完成之后将其解压,解压之后的目录如下:

需要将以上三个文件复制到CUDA的安装目录中,通过上面的安装,我们将CUDA安装到了C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3中。
四、安装anaconda
安装Anaconda:
然后最好是使用anaconda安装tensorflow,先去安装anaconda,详细教程传送门:https://blog.csdn.net/fan18317517352/article/details/123035625
其实如果不想麻烦的配置环境变量,可以在安装Anaconda过程中选择JUST ME, 然后将Anaconda加入环境变量。

然后直接就可以在anaconda里选择tensorflow-gpu进行安装,安装完毕后,查看能否支持gpu:
import os
import tensorflow as tf
print(tf.test.is_gpu_available())
gpus = tf.config.list_physical_devices('GPU')
cpus = tf.config.list_physical_devices('CPU')
print(gpus, cpus)
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
如果输出如下,则说明可以使用GPU
(注意,真的只是可以使用,不代表可以用了,自己体会,我曾经被坑了好久):

五、测试(重点干货来了)
import os
# 指定使用0卡
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
如果提示缺少dll文件,去这个网址找:https://cn.dll-files.com/cudart64_110.dll.html 缺啥找啥,看链接后缀
然后训练模型,发现只能训练前馈神经网络,速度还很慢,训练深度网络时,直接内存不足,但原因可能是由于缺少文件:(这个问题我查了很多资料,大部分无关痛痒,没有对症下药)
有说卸了GPU版本装CPU版的,完事后还说CPU比GPU快,我也是很无语(我只想说那你何必废劲用GPU呢,直接用CPU不就好了,
至于CPU比GPU快的问题,这个问题要看你的网络结构大小了,网络结构比较小的时候(比如简单前馈神经网络),cpu与gpu数据传输过程耗时更高,这个时候只用cpu会更快。
网络结构比较庞大的时候,(比如深层卷积神经网络,层数大于10层就很明显了,CPU根本跑不动),gpu的提速就比较明显了。
)
Process finished with exit code -1073740791 (0xC0000409)

解决办法:Pycharm中,点击RUN-EDIT CONFIGURATIONS,输出错误信息

发现缺少文件:

下载zlib并且解压

dll放到cuda安装目录的bin里,lib放到cuda安装目录的lib文件夹下,然后开始训练,你会发现用GPU真香
测试模型:

batch_size=128
epoch=1
num_classes=10
CPU耗时:

GPU耗时:

切换CPU GPU 只要切换设备就行了,我只进行了1epoch的卷积训练,可以看到GPU速度要比CPU快个10 倍左右,如果是前馈神经网络或者简单的神经网络,测试验证使用CPU是比GPU要快的,所以自己需要根据实际情况切换设备。
需要zlib文件的可以给我留言。
Original: https://www.cnblogs.com/fengwenzhee/p/16791010.html
Author: 陈扬天
Title: tensorflow-gpu版本安装及深度神经网络训练与cpu版本对比
相关阅读
Title: plt: subplot()、subplots()详解及返回对象figure、axes的理解
首先subplot()、subplots()均用于Matplotlib 绘制多图
在使用这两个函数之前,我们需要了解它的实际工作流和返回对象的含义,以便更好地使用它们来处理大数据。
[En]
Before we use these two functions, we need to understand the meaning of its * actual workflow * and * return object * , so that we can better use them to deal with large data.
1.从两者的区别来谈谈函数返回对象:
菜鸟教程原文解释:
subplots 一次性创建并返回所有的子图和其 axe 对象。subplot则是分开多次添加子图。每次调用返回一个子图和对应的 ax 对象。
我不知道当你第一次看到这段文字时,你是否感到困惑。不管怎么说,我被吸引住了。后来,在阅读了大量教程后,我发现这一说法极其含糊和不准确。
[En]
I don’t know if you were confused when you saw this passage for the first time. Anyway, I was fascinated. Later, after reading a large number of tutorials, I found that this statement is extremely vague and inaccurate.
来让我们搞懂它们吧
来看这段常见代码:
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
这里fig和ax是两个subplots()的返回对象,名称当然可以自定义
这到底是什么意思呢?这是最重要的。
[En]
What does it actually mean? This is the most important thing.
我的理解:
fig——-即figure,画窗
ax——-即axex,画窗中创建的笛卡尔坐标区
上述代码是以下代码的简化形式:
[En]
The above code is a simplified form of the following code:
fig = plt.figure()
ax = fig.add_subplot(111)
关于subplot():
来看matplotlib.pyplot.subplot的官方解释:

注意这句: This is a wrapper of Figure.add_subplot which provides additional behavior when working with the implicit API (see the notes section).
即是对add_subplot()函数的封装调用。
再来看add_subplot():

意思就是用来 向画窗添加坐标区的。
那么我们可以进行总结了:
subplot()、subplots()在实际过程中,先创建了一个figure画窗,然后通过调用add_subplot()来向画窗中 各个分块添加坐标区,其差别在于是分次添加(subplot())还是一次性添加(subplots())
我的解释可能有点令人困惑。我们再来看看另一张图片:
[En]
My explanation may be a bit confusing. Let’s take a look at another picture:

另外:matplotlib 是从MATLAB启发而创建的,这俩的命令几乎一模一样,所以概念基本完全相同,既然python教程看的那么麻烦,何不看看MATLAB官方文档,给你解释的明明白白的还附带一堆例子。
subplot
axis
figure
plot
axes
到这里看完,相信你一定有一个更清晰的认识了,下面关于subplot()、subplots()就说的简单一点了,更多需要自己带上理解去感悟
2.plt.subplot()
函数原型 subplot(nrows, ncols, index, **kwargs),一般我们只用到前三个参数,将整个绘图区域分成 nrows 行和 ncols 列,而index用于对子图进行编号
这里直接copy了菜鸟教程的代码,如图中,创建了一个1×2的subplot对象,即两块绘制区域,当我们在每个区域进行绘制时,需要使用参数来制定绘制区域,即使用第三个参数index
import matplotlib.pyplot as plt
import numpy as np
xpoints = np.array([0, 6])
ypoints = np.array([0, 100])
plt.subplot(1, 2, 1)
plt.plot(xpoints,ypoints)
plt.title("plot 1")
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.subplot(1, 2, 2)
plt.plot(x,y)
plt.title("plot 2")
plt.suptitle("RUNOOB subplot Test")
plt.show()

3.plt.subplots()
语法格式:
matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False,
sharey=False, squeeze=True,subplot_kw=None, gridspec_kw=None, **fig_kw)
-nrows:默认为 1,设置图表的行数。
-ncols:默认为 1,设置图表的列数。
-sharex、sharey:设置 x、y 轴是否共享属性,默认为 false,可设置为 ‘none’、’all’、’row’ 或 ‘col’。 False 或 none 每个子图的 x 轴或 y 轴都是独立的,True 或 ‘all’:所有子图共享 x 轴或 y 轴,’row’ 设置每个子图行共享一个 x 轴或 y 轴,’col’:设置每个子图列共享一个 x 轴或 y 轴。
直接看实例,关于图的解释写在了注释里
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,100, 4)
y = np.sin(x**2)
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')
f, ([ax1, ax2],[ax3,ax4]) = plt.subplots(2, 2, sharex=True)
ax1.plot(x, y)
ax1.set_title('Sharing x axis')
ax2.scatter(x, y)
ax3.scatter(x, y)
ax4.scatter(x, y)
fig, axs = plt.subplots(2, 2, subplot_kw=dict(projection="polar"))
axs[0, 0].plot(x, y)
axs[1, 1].scatter(x, y)
plt.show()

Original: https://blog.csdn.net/sunjintaoxxx/article/details/121098302
Author: 涛涛ALG
Title: plt: subplot()、subplots()详解及返回对象figure、axes的理解
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/363527/
转载文章受原作者版权保护。转载请注明原作者出处!