TensorFlow2-新加坡龙良曲
# TensorFlow2.0简介
B站最完整版:深度学习与TensorFlow2入门实战-龙良曲人工智能精品课程
发展历程
- 2015.9发布0.1版本。
- 2017.2发布1.0版本。
- 2019春发布2.0版本。
优点
- 简洁:通过清理废弃的API和减少重复来简化API。
- 易用:相对于1.x版本陡峭的学习路线,2.0入门深度学习难度大大降低。
- 自动求导。
- GPU加速。
- 神经网络Layers。
- 在训练方面:使用Keras和eager execution轻松构建模型,为研究提供强大的实验工具。
与其他框架对比
- Scikit-learn:面向机器学习,不支持深度学习,不支持GPU加速运算。
Caffe
:主要由Facebook在做强烈的推广。第一个面向深度学习的框架,采用C++编程方式,支持Python接口,不支持自动求导。是面向深度学习的一个鼻祖。- Keras:被谷歌收购了,是TensorFlow的一个API包装,以后会逐渐淡出因为谷歌不想同时维护两个框架。
- Theano:由加拿大深度学习一位老师开发出来的,现在由Google维护。开发难,调试难,现在已经停止开发了。Tensorflow1的原型就是Theano。
- Torch:使用Lua语言,相对来说比较小众,对新手不友好。
- Chainer:日本开发的一款深度学习框架。TensorFlow和PyTorch借鉴了这个框架。
- MXNet:华人开发的一个深度学习框架,亚马逊深度学习官方框架。
PyTorch
:必须掌握的框架。结合了Caffe2作为其后端,结合了Torch作为其前端。- NUS SINGA:Prof. OOI&Prof.Wang。
eco-system 生态系统
- TensorFlow2.0核心库。
- TensorFlow Lite。
- TensorFow.JS。
- TensorFlow Extended。
- TensorFlow Prob。
- TPU Cloud。
CPU-->GPU-->TPU
加速计算能力逐渐增强。
caffe作者
贾扬清(没错,这位大神是中国人),拥有加州大学伯克利分校计算机科学博士学位、清华大学硕士学位和学士学位,曾于新加坡国立大学、微软亚洲研究院、NEC美国实验室、Google Brain工作,现任Facebook研究科学家,负责前沿AI平台的开发以及前沿的深度学习研究。
# 环境需求
- window10。
- anaconda 2018版本。
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
- python3.7。
- CUDA 10.0 NVIDIA显卡 。
https://developer.nvidia.com/cuda-toolkit-archive
GTX1060 6GB/GTX 1080Ti 11GB或者更高。 - TensorFlow2.0。
- PyCharm。
# 环境搭建
anaconda安装,安装的时候记得勾选path。安装结束后使用
cmd conda list
来验证是否完成。CUDA 10.0 NVIDIA显卡安装。visual studio 不勾,display 显卡驱动如果电脑已经安装的版本高就去掉勾。
环境变量配置。path新加路径并move up到顶部。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\CUPTI\libx64
和C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\cudnn\bin
安装成功会提示如下信息:C:\Users\ylxyx>nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2018 NVIDIA Corporation Built on Sat_Aug_25_21:08:04_Central_Daylight_Time_2018 Cuda compilation tools, release 10.0, V10.0.130
1
2
3
4
5
# 创建conda虚拟开发环境
我们把tensorflow-gpu安装到另外一个虚拟环境,这样做的好处是CPU版和GPU不互相影响。安装GPU版需要本地计算机配置支持CUDA的NVIDIA显卡,因为在搭建TensorFlow的GPU版本时,首先需要做的一件事就是安装其基础支持平台CUDA和其机器学习库cuDNN,然后在此基础上搭建TensorFlow GPU版本。
其次还要了解一下不同的TensorFlow版本所需要对应安装的CUDA和cuDNN版本是多少,因为在TensorFlow的GPU版本安装过程中,如果对应的CUDA版本和cuDNN版本不正确的话,是无法正常使用GPU来进行模型训练的。
创建conda虚拟环境,安装依赖包和CPU版本相同,这里就不再讲述了。建议GPU虚拟环境的名称为:tensorflow-gpu。
安装GPU版本之前,首先确认本地计算机是否配置了NVIDIA显卡,并且运算能力在3.5之上。要查看本地计算机显卡算力,可以直接去nvidia查看,网址如下:
https://developer.nvidia.com/cuda-gpus#compute
在安装tensorflow-gpu之前,还需要安装CUDA和cuDNN。CUDA (ComputeUnified Device Architecture)是显卡厂商 NVIDIA 推出的运算平台,它采用通用并行计算架构,该架构使 GPU 能够解决复杂的计算问题。cuDNN是指NVIDIA cuDNN,它是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。
- 创建环境命令
Anaconda提供了一个默认的base环境,也可以直接在base环境中开发应用程序。基于课程内容需要,我们创建tensorflow-cpu环境。创建环境的命令为:
conda create -n ENV_NAME python=x.x
其中,-n表示环境名称参数,ENV_NAME为待创建虚拟开发环境的名称,x.x表示该环境中python的版本是多少,例如想要3.9版本的python,就写python=3.9。
启动Windows命令行窗口,在窗口输入下面的命令:
conda create -n tensorflow-gpu python=3.7
若出现‘conda’不是内部或外部命令,也不是可运行的程序等信息,需要配置Anaconda系统环境变量。命令执行完成,名称为tensorflow-gpu的虚拟开发环境就创建成功了。
- 查看环境命令
若需要查看当前Anaconda有哪些虚拟环境,可以使用下面的命令:
C:\Users\ylxyx>conda env list
# conda environments:
#
base * C:\Anaconda3
tensorflow-gpu C:\Anaconda3\envs\tensorflow-gpu
2
3
4
5
- 激活环境命令
该命令是常用的操作命令,使用该命令激活环境后,才能进入该虚拟环境进行编程。命令如下:
conda activate ENV_NAME
其中ENV_NAME是要进入的环境名称。进入成功后,一般可以看到命令行的最左端括号中也切换成了ENV_NAME的名称。另外,如果想要从一个环境A切换到另一个环境B去,也可以直接执行该命令,将ENV_NAME写为B即可。
C:\Users\ylxyx>conda activate tensorflow-gpu
(tensorflow-gpu) C:\Users\ylxyx>
2
3
- 退出环境命令
若需要退出当前虚拟开发环境,可以使用下面的命令:
conda deactivate
该命令直接退回到base环境。
- 删除环境命令
该命令需谨慎使用,因为该命令会删除虚拟环境下的所有数据。命令如下:
conda remove -n ENV_NAME --all
- 安装tensorflow-gpu版本
安装GPU版本之前,需要确定合适的tensorflow-gpu版本,因为不同版本适配不同的CUDA和cuDNN版本。进入ensorflow官网页面,查看适合本地计算机安装的tensorflow-gpu版本。
启动Windows命令行窗口,输入下面的命令创建tensorflow-gpu虚拟开发环境:
conda create -n tensorflow-gpu python=3.8
输入激活tensorflow-gpu环境命令:
conda activate tensorflow-gpu
安装相关依赖包:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy matplotlib pillow pandas scikit-learn
(tensorflow-gpu) C:\Users\ylxyx>pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
安装tensorflow-gpu 2.0.0版本:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow-gpu==2.0.0
在安装过程中,若出现“ReadTimeoutError”,说明网络速度比较慢,换一个网络速度比较快的环境安装。或者设置超时时间:
pip --default-timeout=1000 install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow-gpu==2.0.0
在安装过程中,若出现如下图所示的错误:

可使用pip单独安装termcolor:
pip install termcolor==1.10
在安装过程中,若出现下图所示的错误:

可使用pip单独安装wrapt:
pip install wrapt==1.10
- 验证tensorflow-gpu版本
使用conda命令激活tensorflow-gpu虚拟开发环境:
conda activate tensorflow-gpu
进入Python环境:
(tensorflow-gpu) C:\Users\ylxyx>python
在Python环境,分别执行下面的语句:
>>> import tensorflow as tf
>>> print(tf.__version__)
2
若输出tensorflow的版本号,则说明tensorflow 安装成功,后面还要验证GPU是否能够正常使用。
在Python环境输入下面的语句:
print(tf.config.list_physical_devices('GPU'))
若输出“[]”,说明GPU设备没有启用,查看打印信息,输出了cusolver64_10.dll not found错误。CUDA11默认使用的是cusolver64_11.dll的文件,但是代码运行的时候却是需要cusolver64_10.dll文件,这可能是tensorflow-2.4.0的一个BUG,从网上下载cusolver64_10.dll,然后复制到CUDA安装目录computingtoolkit\v11\bin目录下即可解决该问题。或者直接修改cusolver64_11.dll名称为cusolver64_10.dll,然后重新启动命令行窗口,再次执行列出GPU设备的命令。若输出如下内容,说明GPU设备已启用。
如果错误信息是:AttributeError: module ‘tensorflow_core._api.v2.config’ has no attribute ‘list_physical_devices’应该是接口更新了,改成以下接口就不会报错了。
1 查看所有GPU
tf.config.experimental.list_physical_devices('GPU')
2023-04-29 14:26:34.414499: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2023-04-29 14:26:34.473175: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties:
name: NVIDIA GeForce RTX 3060 Ti major: 8 minor: 6 memoryClockRate(GHz): 1.665
pciBusID: 0000:01:00.0
2023-04-29 14:26:34.473314: I tensorflow/stream_executor/platform/default/dlopen_checker_stub.cc:25] GPU libraries are statically linked, skip dlopen check.
2023-04-29 14:26:34.473482: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1746] Adding visible gpu devices: 0
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
2
3
4
5
6
7
2 查看所有设备
tf.config.experimental.list_physical_devices(device_type=None)
[PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU'), PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
如果错误信息是:TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.1.0If you cannot immediately regenerate your protos, some other possible workarounds are:
Downgrade the protobuf package to 3.20.x or lower.
Set PROTOCOL_BUPFERS_PYTHON_iMPLEMENTATION=python (but this will use pure-Python parsing and will be mch slower ,More information: https://developers. google.com/protocol-buffers/docs/news/2022-05-06#python-updates
(paddle) F: \pycharm\PyCharm Community Edition 2022.1.4\bin\PaddleOCR-release-2.6\PPOCRLabe1>-
解决办法:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple protobuf==3.19.0