深度学习框架TensorFlow2快速入门教程

01 深度学习框架TensorFlow2快速入门教程

目录结构

01 概述

02 准备OVF虚拟机镜像

03 导入Ubuntu22的初始化环境

04 使用VMWare拍摄快照进行备份

05 Docker环境的测试和使用

06 安装Nvidia容器工具包

07 GPU支持的TensorFlow的环境搭建和踩坑

08 拉取非GPU支持的TensorFlow镜像

09 启动TensorFlow环境并访问测试

10 优化TensorFlow环境

11 导出TensorFlow环境为OVF镜像

12 在Ubuntu22中安装Anaconda3

13 在Ubuntu22中安装Vscode

14 在Ubuntu22中使用pip安装tensorflow

15 在Ubuntu22中安装CUDA驱动

16 导出支持GPU的TensorFlow环境为OVF镜像

17 创建各种维度的张量

18 将张量转换为numpy

19 将两个张量相加

20 将两个张量进行元素相乘

21 将两个张量进行矩阵相乘

22 张量的一些简单的聚合运算

23 变量的基本用法

24 总结

视频教程

环境搭建

安装

官方地址:https://tensorflow.google.cn/install?hl=zh-cn

通过pip安装

请从 PyPI 中选择以下某个 TensorFlow 软件包进行安装:

  • tensorflow:支持 CPU 和 GPU 的最新稳定版(适用于 Ubuntu 和 Windows)。
  • tf-nightly:预览 build(不稳定)。Ubuntu 和 Windows 均包含 GPU 支持。
  • tensorflow==1.15:TensorFlow 1.x 的最终版本。
bash 复制代码
pip install tensorflow

安装驱动包

参考地址:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

Configure the production repository:

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

Optionally, configure the repository to use experimental packages:

sudo sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list

Update the packages list from the repository:

sudo apt-get update

Install the NVIDIA Container Toolkit packages:

sudo apt-get install -y nvidia-container-toolkit

添加GPU支持

Docker 是在 GPU 上运行 TensorFlow 的最简单方法,因为主机只需安装 NVIDIA® 驱动程序,而不必安装 NVIDIA® CUDA® 工具包。

安装 Nvidia 容器工具包以向 Docker 添加 NVIDIA® GPU 支持。nvidia-container-runtime 仅适用于 Linux。

检查 GPU 是否可用:

bash 复制代码
lspci | grep -i nvidia

验证 nvidia-docker 安装效果:

bash 复制代码
docker run --gpus all --rm nvidia/cuda nvidia-smi

通过Docker安装

官方 TensorFlow Docker 映像位于 tensorflow/tensorflow Docker Hub 代码库中。映像版本按照以下格式进行标记:

标记 说明
latest TensorFlow CPU 二进制映像的最新版本。(默认版本)
nightly TensorFlow 映像的每夜版。(不稳定)
version 指定 TensorFlow 二进制映像的版本,例如:2.1.0
devel TensorFlow master 开发环境的每夜版。包含 TensorFlow 源代码。
custom-op 用于开发 TF 自定义操作的特殊实验性映像。

每个基本标记都有会添加或更改功能的变体:

标记变体 说明
tag -gpu 支持 GPU 的指定标记版本。
tag -jupyter 针对 Jupyter 的指定标记版本(包含 TensorFlow 教程笔记本)

下载支持GPU的TensorFlow:

bash 复制代码
docker pull tensorflow/tensorflow:latest-gpu-jupyter

TensorFlow Docker 映像已经过配置,可运行 TensorFlow。Docker 容器可在虚拟环境中运行,是设置 GPU 支持的最简单方法。

bash 复制代码
docker run -it -p 8888:8888 tensorflow/tensorflow:latest-gpu-jupyter

浏览器访问:http://localhost:8888

使用非GPU支持的TensorFlow:

bash 复制代码
docker pull tensorflow/tensorflow:latest-jupyter
docker run -it -p 8888:8888 tensorflow/tensorflow:latest-jupyter

之前的命令有两个问题:

  • 不能开机自动启动的
  • 每次关闭以后,会有一个垃圾容器存在,需要手动的去删除

这两个问题怎么优化呢?

bash 复制代码
docker run --restart=always --name tensorflow -itd -p 8888:8888 tensorflow/tensorflow:latest-jupyter

这个时候有个新的问题,怎么获取token?

bash 复制代码
docker logs -f --tail=100 tensorflow

使用pip安装tensorflow

命令:

bash 复制代码
pip install tensorflow

在Ubuntu22中安装CUDA驱动:

bash 复制代码
# 第一步:安装gcc
sudo apt install gcc -y

# 第二步:下载CUDA
wget https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda_11.7.1_515.65.01_linux.run

# 第三步:安装
sudo sh cuda_11.7.1_515.65.01_linux.run

# 第四步:配置环境变量
export PATH=/usr/local/cuda-11.7/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

# 第五步:安装依赖
sudo apt install nvidia-cuda-toolkit

# 第六步:检查
nvcc -V

张量

张量基本用法

张量本质上是一种数组。

导入依赖:

bash 复制代码
import tensorflow as tf
import numpy as np

创建基础的张量:

python 复制代码
# 创建int32类型的0维张量
rank_0_tensor = tf.constant(4)
print(rank_0_tensor)

# 创建float32类型的1维张量
t1 = tf.constant([2.0, 3, 4])
print(t1)

# 创建二维张量
t2 = tf.constant([[1,2],[3,4],[5,6]], dtype=tf.float32)
print(t2)

创建一个三维的张量:

python 复制代码
t3 = tf.constant([[[1],[2]],[[3],[4]],[[5],[6]]])
print(t3)

张量是通过tf.constant()创建,闯入的值是一个数组,这个数组是几维的,张量就是几维。比较特殊的是,如果传入的是一个常量,那么这个张量,就是0维的张量。

张量转Numpy

方法1:

python 复制代码
np.array(t2)

方法2:

bash 复制代码
t2.numpy()

张量求和

要求两个张量的形状是一样的。会让对应索引的元素分别相加。

举例:

bash 复制代码
a = [[1,2],[3,4]]
b = [[3,3],[4,4]]

a + b = 每个索引位置对应相加 [[1+3,2+3],[3+4,4+4]] = [[4,5],[7,8]]

示例代码:

python 复制代码
a = tf.constant([[1,2],[3,4]])
b = tf.constant([[3,3],[4,4]])

tf.add(a, b)

张量元素乘法

指的是让每个对应索引的元素分别相乘。

距离:

bash 复制代码
a = [[1,2],[3,4]]
b = [[3,3],[4,4]]

a + b = 每个索引位置对应相乘 [[1x3,2x3],[3x4,4x4]] = [[3,6],[12,16]]

示例代码:

python 复制代码
a = tf.constant([[1,2],[3,4]])
b = tf.constant([[3,3],[4,4]])

tf.multiply(a, b)

张量矩阵乘法

矩阵的乘法比较复杂,我们从简单到难度去记忆。

当一个矩阵和一个向量相乘的时候,要求矩阵行的元素个数等于向量的元素个数。结果是矩阵的每行和向量相乘,然后求和,这些和组成的新的一列,形成最后的结果。这个说起来比较复杂,举个简单的例子:

bash 复制代码
[[1,2],[3,4]] 乘 [3,3]

= [1, 2] 乘 [3, 3] = [1*3 + 2*3] = 9
= [3, 4] 乘 [3, 3] = [3*3 + 4*3] = 21

所以结果是:[9, 21]

当一个矩阵和另一个矩阵相乘的时候,要求矩阵和行数和列数是相同的。然后用矩阵的每一行与另一个矩阵的每一列相乘再相加,最终得到一个新的矩阵。还是举个简单的例子:

bash 复制代码
[[1,2],[3,4]] 乘 [[2,3],[2,1]]

= [1,2] 乘 [2,2] , [1,2] 乘 [3,1] = [6,5]
= [3,4] 乘 [2,2] , [3,4] 乘 [3,1] = [14,13]

所以结果是:[[6,5],[14,13]]

举例2:

bash 复制代码
a = 
[
	[1,2],
	[3,4]
]

b = [
	[3,3],
	[4,4]
]

===
[
	[1,2]x[3,4],[1,2]x[3,4],
	[3,4]x[3,4],[3,4]x[3,4]
]

===
[
	[1x3+2x4, 1x3+2x4],
	[3x3+4x4, 3x3+4x4]
]

===
[
	[11, 11],
	[25, 25]
]

示例代码:

python 复制代码
# 矩阵乘以矩阵
a = tf.constant([[1,2],[3,4]])
b = tf.constant([[2,3],[2,1]])
tf.matmul(a, b)

# 矩阵乘以矩阵
a = tf.constant([[1,2],[3,4]])
b = tf.constant([[3,3],[4,4]])
tf.matmul(a, b)

张量求最大值

python 复制代码
cst = tf.constant([[1,2,3],[3,33,333]])
tf.reduce_max(cst)

张量求最小值

python 复制代码
cst = tf.constant([[1,2,3],[3,33,333]])
tf.reduce_min(cst)

张量求和

python 复制代码
cst = tf.constant([[1,2,3],[3,33,333]])
tf.reduce_sum(cst)

张量求平均值

python 复制代码
cst = tf.constant([[1,2,3],[3,33,333]])
tf.reduce_mean(cst)

张量求最大值索引

python 复制代码
cst = tf.constant([[1,2,3],[3,33,333]])
tf.argmax(cst)

张量求最小值索引

python 复制代码
cst = tf.constant([[1,2,3],[3,33,333]])
tf.argmin(cst)

变量

TensorFlow中的变量是一种特殊的张量,形状不可以改变,但是可以改变其中的参数值。定义的方法是:

bash 复制代码
tv = tf.Variable([[1,2],[3,4]])
tv

通过.shape可以查看形状,通过.dtype可以查看数据类型,通过.numpy可以转换为numpy的数组类型。

python 复制代码
print(tv.dtype)
print(tv.shape)
print(tv.numpy)

通过.assign(数组)的方式,可以修改变量的内容。需要注意的是,新的数组必须和旧数组的形状是一样的。

bash 复制代码
tv.assign([[2,2],[3,4]])
相关推荐
码银3 分钟前
冲破AI 浪潮冲击下的 迷茫与焦虑
人工智能
何大春7 分钟前
【弱监督语义分割】Self-supervised Image-specific Prototype Exploration for WSSS 论文阅读
论文阅读·人工智能·python·深度学习·论文笔记·原型模式
uncle_ll15 分钟前
PyTorch图像预处理:计算均值和方差以实现标准化
图像处理·人工智能·pytorch·均值算法·标准化
宋1381027972015 分钟前
Manus Xsens Metagloves虚拟现实手套
人工智能·机器人·vr·动作捕捉
SEVEN-YEARS19 分钟前
深入理解TensorFlow中的形状处理函数
人工智能·python·tensorflow
世优科技虚拟人22 分钟前
AI、VR与空间计算:教育和文旅领域的数字转型力量
人工智能·vr·空间计算
cloud studio AI应用28 分钟前
腾讯云 AI 代码助手:产品研发过程的思考和方法论
人工智能·云计算·腾讯云
Suyuoa35 分钟前
附录2-pytorch yolov5目标检测
python·深度学习·yolo
禁默40 分钟前
第六届机器人、智能控制与人工智能国际学术会议(RICAI 2024)
人工智能·机器人·智能控制
Robot2511 小时前
浅谈,华为切入具身智能赛道
人工智能