深度学习框架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 的最终版本。
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 是否可用:

lspci | grep -i nvidia

验证 nvidia-docker 安装效果:

docker run --gpus all --rm nvidia/cuda nvidia-smi

通过Docker安装

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

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

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

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

下载支持GPU的TensorFlow:

docker pull tensorflow/tensorflow:latest-gpu-jupyter

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

docker run -it -p 8888:8888 tensorflow/tensorflow:latest-gpu-jupyter

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

使用非GPU支持的TensorFlow:

docker pull tensorflow/tensorflow:latest-jupyter
docker run -it -p 8888:8888 tensorflow/tensorflow:latest-jupyter

之前的命令有两个问题:

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

这两个问题怎么优化呢?

docker run --restart=always --name tensorflow -itd -p 8888:8888 tensorflow/tensorflow:latest-jupyter

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

docker logs -f --tail=100 tensorflow

使用pip安装tensorflow

命令:

pip install tensorflow

在Ubuntu22中安装CUDA驱动:

# 第一步:安装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

张量

张量基本用法

张量本质上是一种数组。

导入依赖:

import tensorflow as tf
import numpy as np

创建基础的张量:

# 创建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)

创建一个三维的张量:

t3 = tf.constant([[[1],[2]],[[3],[4]],[[5],[6]]])
print(t3)

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

张量转Numpy

方法1:

np.array(t2)

方法2:

t2.numpy()

张量求和

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

举例:

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

示例代码:

a = tf.constant([[1,2],[3,4]])
b = tf.constant([[3,3],[4,4]])tf.add(a, b)

张量元素乘法

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

距离:

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

示例代码:

a = tf.constant([[1,2],[3,4]])
b = tf.constant([[3,3],[4,4]])tf.multiply(a, b)

张量矩阵乘法

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

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

[[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]

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

[[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:

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]
]

示例代码:

# 矩阵乘以矩阵
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)

张量求最大值

cst = tf.constant([[1,2,3],[3,33,333]])
tf.reduce_max(cst)

张量求最小值

cst = tf.constant([[1,2,3],[3,33,333]])
tf.reduce_min(cst)

张量求和

cst = tf.constant([[1,2,3],[3,33,333]])
tf.reduce_sum(cst)

张量求平均值

cst = tf.constant([[1,2,3],[3,33,333]])
tf.reduce_mean(cst)

张量求最大值索引

cst = tf.constant([[1,2,3],[3,33,333]])
tf.argmax(cst)

张量求最小值索引

cst = tf.constant([[1,2,3],[3,33,333]])
tf.argmin(cst)

变量

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

tv = tf.Variable([[1,2],[3,4]])
tv

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

print(tv.dtype)
print(tv.shape)
print(tv.numpy)

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

tv.assign([[2,2],[3,4]])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/598549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[ffmpeg系列 02] 音视频基本知识

一 视频 RGB&#xff1a; AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB… Y&#xff1a;明亮度, Luminance或luma, 灰阶图&#xff0c; UV&#xff1a;色度&#xff0c;Chrominance或Chroma。 YCbCr: Cb蓝色分量&#xff0c;Cr是红色分量。 取值范围&#xff…

一文搞懂Python Web开发 Django

简介 Django是一个主流的Python Web框架&#xff0c;用于快速开发 Web 应用程序。功能强大&#xff0c;Python Web应用开发的第一选择。 特点 ORM&#xff08;对象关系映射&#xff09;&#xff1a; Django 提供了一个强大的 ORM&#xff0c;允许开发者通过 Python 代码来定义…

拟杆菌在肠道感染中的矛盾作用

谷禾健康 拟杆菌门细菌是革兰氏阴性菌的代表&#xff0c;具有外膜、肽聚糖层和细胞质膜。它们无氧呼吸的主要副产物是乙酸、异戊酸和琥珀酸。是最耐氧的厌氧菌之一。 参与人体结肠中许多重要的代谢活动包括碳水化合物的发酵、含氮物质的利用以及胆汁酸和其他类固醇的生物转化。…

Qt中图片旋转缩放操作

在我们开发过程中&#xff0c;难免会遇到加载图片的问题&#xff0c;在上一个开发项目里我就遇到了图片缩放的问题&#xff0c;所以&#xff0c;我决定将这一部分好好研究&#xff0c;记录下来&#xff0c;希望对大家有帮助哟~ 在讲解之前&#xff0c;我们先看一看具体的展示效…

Java反射篇----第一篇

系列文章目录 文章目录 系列文章目录前言一、除了使用new创建对象之外,还可以用什么方法创建对象?二、Java反射创建对象效率高还是通过new创建对象的效率高?三、java反射的作用四、哪里会用到反射机制?五、反射的实现方式:前言 前些天发现了一个巨牛的人工智能学习网站,…

OJ练习第188题——队列中可以看到的人数

队列中可以看到的人数 力扣链接&#xff1a;1944. 队列中可以看到的人数 题目描述 示例 解题思路&#xff08;单调栈&#xff09; 分析图例可以发现&#xff0c;第 0个人可以看到的三个人的身高是严格递增的。如果满足 i<j&#xff0c;此时下标为 jjj 且靠后的人比下标为…

亚马逊新品推广的三种方法是什么?广告排名跟哪些因素有关?

亚马逊新品推广的三种方法是什么&#xff1f; 促销活动&#xff1a;新品上市时&#xff0c;可以通过促销活动吸引消费者的关注和购买欲望。例如&#xff0c;提供限时折扣、买一送一、赠品等促销方式&#xff0c;吸引消费者尝试新品。 社交媒体营销&#xff1a;利用社交媒体平…

零售EDI:Metro EDI项目案例

麦德龙Metro 总部位于杜塞尔多夫&#xff0c;在全球范围内经营批发和零售业务。在2018/2019 财年&#xff0c;麦德龙Metro 的全球销售额约为 270 亿欧元。从2016年开始&#xff0c;麦德龙Metro就开始对其当时约230家门店和20,000多家分销合作伙伴进行数字化整合&#xff0c;借助…

vivado non-project

https://www.xilinx.com/video/hardware/using-the-non-project-batch-flow.html --video https://cloud.tencent.com/developer/article/1169476 bd related run_my_design.tcl 交互模式 start_gui stop_gui

【RabbitMQ】1 消息中间件MQ概述

目录 什么是消息中间件为什么使用消息中间件流量削峰应用解耦异步处理 主流消息中间件及选型选取原则RabbitMQRocketMQKafka如何选择 消息中间件应用场景电商秒杀案例拉勾B端C端数据同步案例支付宝购买电影票 什么是消息中间件 维基百科对消息中间件的解释&#xff1a;面向消息…

利用GitHub开源项目ChatGPTNextWeb构建属于自己的ChatGPT - Docker

Docker部署ChatGPTNextWeb ChatGPTNextWeb项目github开源地址&#xff1a;https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web 根据文档部署ChatGPTNextWeb 文档地址&#xff1a;https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/blob/main/README_CN.md 步骤一&#…

Pytorch框架学习笔记

官网- PyTorch Tensor 构造随机初始化矩阵 xtorch.rand(5,3) 构造全0矩阵&#xff0c;数据类型为long xtorch.zeros&#xff08;5,3,dtypetorch.long&#xff09; 获取维度信息 x.size(&#xff09; tensor加法 torch.add&#xff08;x&#xff0c;y&#xff09; xy y…

CPU平台做视频智能分析,Lnton视频分析平台不仅支持流分析,同时也支持图片分析了

LntonAIServer最新v1.0.09版本支持图片分析了&#xff0c;经过几个月的研发&#xff0c;在原有的视频流分析的基础上&#xff0c;我们终于支持大家都非常期待的图片分析功能了&#xff0c;图片分析的功能加上&#xff0c;能有利于很多场景的展开&#xff0c;比如在烟火、明厨亮…

图像预处理——transforms

一、transforms 运行机制 torchvision是PyTorch的一个扩展库&#xff0c;提供了许多计算机视觉相关的工具和功能。下面是关于torchvision中常用模块的介绍&#xff1a; torchvision.transforms&#xff1a;提供了一系列常用的图像预处理方法&#xff0c;用于对图像进行变换、…

基于springboot+vue网吧管理系统(程序+数据库+文档)

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;摘 要 随着信息技术和网络技术的…

STM32CubeMX教程19 I2C - MPU6050驱动

目录 1、准备材料 2、实验目标 3、实验流程 3.0、前提知识 3.1、CubeMX相关配置 3.1.1、时钟树配置 3.1.2、外设参数配置 3.1.3、外设中断配置 3.2、生成代码 3.2.1、外设初始化调用流程 3.2.2、外设中断调用流程 3.2.3、添加其他必要代码 4、常用函数 5、烧录验…

医院信息系统集成平台—后台运维管理系统

随着信息化建设的推进,为了让凝聚了巨大人力物力投入的信息基础设施发挥出其效益,保障整个信息系统的平稳可靠运行,需要有一个可从整体上对包括服务器、网络,存储,安全等组件在内的IT基础设施环境进行综合管理的平台,并能够提供业务系统运行异常的实时告警和进行图形化问…

【Leetcode 209】长度最小的子数组 —— 滑动窗口|双指针

209. 长度最小的子数组 给定一个含有n个正整数的数组和一个正整数target。 找出该数组中满足其总和大于等于target的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr]&#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回0。 示例 1&#xff…

可狱可囚的爬虫系列课程 09:通过 API 接口抓取数据

前面已经讲解过 Requests 结合 BeautifulSoup4 库抓取数据&#xff0c;这种方式在抓取数据时还是比较方便快捷的&#xff0c;但是这并不意味着所有的网站都适合这种方式&#xff0c;并且这也不是抓取数据的最快方式&#xff0c;今天我们来讲一种更快速的获取数据的方式&#xf…

02 Deep learning algorithm

Neural Networks target&#xff1a; inference&#xff08;prediction&#xff09;training my own modelpractical advice for building machine learning systemdecision Tress application: speech&#xff08;语音识别&#xff09; ----> images(计算机视觉)—> t…