简介
TensorFlow(中文名:张量流)
:由Google开发的开源机器学习框架
,广泛用于深度学习和机器学习任务。
TensorFlow特点:
- 提供灵活的计算图模型:允许定义和执行各种复杂的数学运算和机器学习模型。
- 支持深度学习:
- (1)
内置预训练模型
。如:卷积神经网络(CNNs)、循环神经网络(RNNs)、自编码器等。- (2)
支持构建和训练深度神经网络模型
- 支持自动求导(梯度计算):使得梯度下降等优化算法的实现更加容易。
- 支持多设备和平台:包括CPU、GPU和TPU(Tensor Processing Unit)
- 开源:可以自由使用、修改和开发它,而且有一个庞大的社区支持。
- 丰富的生态系统:如:高级API(Keras)、工具(TensorBoard)、模型仓库(TensorFlow Hub),以及大量的扩展库和插件。
- 应用广泛: 图像识别、自然语言处理、语音识别、强化学习等。
TensorFlow的2.x版本引入了许多改进,使其更加易用和直观。
- Keras曾经是一个独立的深度学习框架,而TensorFlow 2.x版本将Keras整合成为了TensorFlow的一个官方高级API。可以直接通过 TensorFlow 来访问 Keras 功能,而不需要额外安装 Keras。
- (1)导入tensorflow:
import tensorflow as tf
- (2)导入keras:
from tensorflow import keras
一、环境配置
- 【深度学习环境配置】Anaconda +Pycharm + CUDA +cuDNN + Pytorch + Opencv(资源已上传)
- 【Python虚拟环境】创建 + 激活 + 安装 + 查看 + 退出 + 删除 + 复制 + 导出 + 导入
电脑系统 :Windows11
软件工具 :PyCharm
cuda :11.8
cudnn :8.6
python :3.9.19
tensorflow :2.10.1
#####################################################
conda create --name tensorflow39 -y
conda activate tensorflow39
conda install python==3.9
pip install tensorflow==2.10.1
# 2.10.1是TensorFlow2.X版本中最后一个同时支持CPU和GPU
二、TensorFlow安装(CPU + GPU)
2.1、版本说明
目前,旧版 TensorFlow1.x 仍然广泛出现在顶会或顶刊的开源项目中。
目前可以分为三种变革版本:
- 旧版(TensorFlow1.x):CPU 和 GPU 是分开的(适用于 Ubuntu 和 Windows)
tensorflow==1.15
:只支持 CPU 版本tensorflow-gpu==1.15
:只支持 GPU 版本- tensorflow==1.15 是 TensorFlow 1.x 的最终版本。
- 新版(
TensorFlow 2.1 ~ 2.10.1
):同时支持 CPU 和 GPU(适用于 Ubuntu 和 Windows)
- 必须使用 Python 3.6-3.9 和 pip 19.0 及更高版本,才能安装 TensorFlow 2。
- 新版(TensorFlow 2.11 及以上):只支持 CPU,官方不再提供 GPU 支持。
- 若需要 GPU 支持,需要自行编译(从源代码构建支持 GPU 的版本)或通过第三方渠道获取(Anaconda or Docker)。
2.2、版本对应关系:TensorFlow + Python(CUDA + cuDNN)
TensorFlow官网:经过测试的构建配置(版本必须对应)
2.3、镜像安装 + 轮子安装
方法一:镜像安装
- 新版 TensorFlow2.x:
pip install tensorflow
- 旧版 TensorFlow1.x:
- TensorFlow CPU 安装(镜像):
pip install tensorflow==1.15
- TensorFlow GPU 安装(镜像):
pip install tensorflow_gpu==1.15
- 若不指定版本:系统将自动检测并安装与当前使用的 Python 版本兼容的且最新的 TensorFlow 版本。
- 在同一台计算机上,不建议同时安装TensorFlow的CPU版本和GPU版本。
- 若网络问题安装失败,可以使用镜像安装:
-i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
- 若TensorFlow GPU 1.15安装失败,则自动安装TensorFlow CPU 1.15:
pip install tensorflow_gpu==1.15 || pip install tensorflow==1.15
方法二:轮子安装
🧀TensorFlow官网
(1)🧀tensorflow-gpu版本关系
(2)🧀tensorflow-gpu轮子下载(阿里云镜像源)
(3)🧀tensorflow-gpu轮子安装:pip install tensorflow_gpu-1.15.0-cp36-cp36m-win_amd64.whl
(1)轮子安装(.whl文件)是不需要联网的,因为轮子文件中已经包含了所需的依赖关系。
(2)翻墙状态,无法安装。—— 异常提示:网络设置或SSL配置问题。
2.4、使用 conda 安装 CUDA + cuDNN + tensorflow_gpu==1.15
- 使用 Conda 在指定的虚拟环境中安装 CUDA 和 cuDNN,可以方便地管理它们的依赖。
- 然而,Conda 通常只安装 CUDA 和 cuDNN 的运行时库,而不是完整的开发环境。
- 若需要 CUDA 编译器(如:nvcc)或完整的开发工具(如:编译自定义 CUDA 内核、构建 TensorFlow 源代码、编译和链接其他 GPU 库),仍需从 NVIDIA 官网直接安装 CUDA。
# conda不支持cudnn=7.4版本
# conda search cuda # 列出所有可用的 cuda 版本以及它们的详细信息
# conda search cudnn # 列出所有可用的 cuDNN 版本以及它们的详细信息
"""
conda create --name tensorflow36 -y
conda activate tensorflow36
conda install python=3.6 -y
conda install cudatoolkit=10.0 -y
conda install cudnn=7.6 -y
pip install tensorflow_gpu==1.15 -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
"""
安装结束之后,PyCharm需关闭后重新启动。
import tensorflow as tf
def check_tensorflow_gpu():
print("TensorFlow 版本:", tf.__version__)
if tf.test.is_gpu_available():
print("GPU is available")
else:
print("GPU is not available, using CPU")
# 测试 GPU 上的简单计算
try:
with tf.Session() as sess:
with tf.device('/GPU:0'):
a = tf.constant([1.0, 2.0, 3.0])
b = tf.constant([4.0, 5.0, 6.0])
c = a + b
result = sess.run(c)
print("GPU 测试计算结果:", result)
except RuntimeError as e:
print(f"GPU 计算错误: {e}")
if __name__ == "__main__":
check_tensorflow_gpu()
"""
TensorFlow 版本: 1.15.0
GPU is available
GPU 测试计算结果: [5. 7. 9.]
"""
三、参数配置
3.1、检查 TensorFlow 版本号(不区分设备类型)
import tensorflow as tf
print("TensorFlow 版本:", tf.__version__)
# (若未安装)ModuleNotFoundError: No module named 'tensorflow'
# (若已安装)TensorFlow 版本: 2.10.1
# 若同时安装了CPU+GPU版本的TensorFlow,则默认打印TensorFlow-GPU版本号(实测结果)。
3.2、检查是否支持TensorFlow - GPU
import tensorflow as tf
if tf.test.is_gpu_available():
print("GPU is available")
else:
print("GPU is not available, using CPU")
3.3、获取 TensorFlow 支持的所有物理设备
import tensorflow as tf
# 在当前系统中,获取 TensorFlow 支持的所有物理设备
devices = tf.config.experimental.list_physical_devices()
# 打印每个设备的信息(类型 + 名称)
for device in devices:
print(device, "设备类型:", device.device_type, "设备名称:", device.name)
"""
PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU') 设备类型: CPU 设备名称: /physical_device:CPU:0
PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU') 设备类型: GPU 设备名称: /physical_device:GPU:0
"""
3.4、设置 TensorFlow 的设备类型(CPU + GPU + TPU)
(1)若GPU版本存在,TensorFlow将默认使用GPU;
(2)否则,TensorFlow会自动切换到CPU;
3.4.1、(方法一)选择设备类型:使用环境变量 CUDA_VISIBLE_DEVICES
import os
# (1)设置环境变量 CUDA_VISIBLE_DEVICES
os.environ['CUDA_VISIBLE_DEVICES'] = '0,1,2'
# (2)测试 os.environ['CUDA_VISIBLE_DEVICES']
try:
cuda_visible_devices = os.environ['CUDA_VISIBLE_DEVICES']
print("os.environ['CUDA_VISIBLE_DEVICES'] =", cuda_visible_devices)
except KeyError:
print("环境变量 CUDA_VISIBLE_DEVICES 未设置")
# (3)测试 os.environ.get('CUDA_VISIBLE_DEVICES')
cuda_visible_devices_get = os.environ.get('CUDA_VISIBLE_DEVICES')
if cuda_visible_devices_get is not None:
print("os.environ.get('CUDA_VISIBLE_DEVICES') =", cuda_visible_devices_get)
else:
print("环境变量 CUDA_VISIBLE_DEVICES 未设置")
"""###########################################################################################################
# 函数功能:获取环境变量 CUDA_VISIBLE_DEVICES 的值。
# 函数说明:os.environ['CUDA_VISIBLE_DEVICES']
# CPU: os.environ['CUDA_VISIBLE_DEVICES'] = '-1' # 表示禁用所有GPU设备,TensorFlow使用CPU设备。
# GPU: os.environ['CUDA_VISIBLE_DEVICES'] = '0' # 表示(单GPU)TensorFlow可以看到并使用的GPU设备的编号: 0。
# os.environ['CUDA_VISIBLE_DEVICES'] = '0,1,2' # 表示(多GPU)TensorFlow可以看到并使用的GPU设备的编号: 0、1、2。
# 返回一个包含指定设备编号的字符串,表示 TensorFlow 可以看到的 GPU 设备列表。
###########################################################################################################"""
3.4.2、(方法二)选择设备类型:使用环境变量 set_visible_devices
import tensorflow as tf
# 获取CPU和GPU设备列表
devices = tf.config.experimental.list_physical_devices('CPU') + tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_visible_devices(devices[0], 'CPU') # 设置CPU设备为可见
tf.config.experimental.set_visible_devices(devices[1], 'GPU') # 设置GPU设备为可见
"""################################################################
# 函数功能:用于设置指定类型的物理设备为可见状态,从而选择使用的设备。
# 函数说明:tf.config.experimental.set_visible_devices(devices, device_type)
# 参数说明:
# devices 要设置为可见的物理设备列表。
# device_type: 要设置为可见的设备类型。可以是 'CPU'、'GPU' 或者 'TPU'。
################################################################"""
"""################################################################
# 函数功能:获取系统中的物理设备列表,可以指定设备类型。
# 函数说明:tf.config.experimental.list_physical_devices(device)
# 参数说明:
# device 设备类型。
# (1)若不输入,则默认列举所有设备
# (2)若输入指定类型,则提取指定类型的所有设备。如:'GPU'、'CPU'、'TPU'。
################################################################"""
3.5、TensorFlow:按需分配GPU内存,而不是一次性分配整个GPU内存。
import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus: # 检查是否至少存在一个GPU设备。
try:
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
except RuntimeError as e:
print(e)
"""################################################################
# 函数功能:用于配置 GPU 内存管理。
# 函数说明:tf.config.experimental.set_memory_growth(device, enable)
# 参数说明:
# device 要配置的物理设备对象(如:'GPU'、'CPU'、'TPU')
# enable 内存增长模式的启用状态(bool类型)。
# (1)若为True, 启用按需分配内存的模式。即 TensorFlow 将在需要时动态增加 GPU 内存,而不是一次性分配整个 GPU 的内存空间。
# (2)若为False,禁用按需分配内存的模式。即 TensorFlow 会一次性分配整个 GPU 的内存空间。
################################################################"""