深度学习框架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…

信息学奥赛一本通:装箱问题

题目链接&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1917 题目 1917&#xff1a;【01NOIP普及组】装箱问题 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 4117 通过数: 2443 【题目描述】 有一个箱子容量为V&#xfffd;(正整数&#xff0c…

Java-虚拟机-逃逸分析/栈上分配/标量替换

假设有下面一个类&#xff0c;本文会一直使用这个类演示 public class User{public int id;public String name; }逃逸分析&#xff1a; 逃逸指的是在方法中创建的对象&#xff0c;逃到方法外&#xff0c;那么逃逸分析&#xff0c;指的就是分析一个在方法内创建的对象&#xf…

一文搞懂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反射的作用四、哪里会用到反射机制?五、反射的实现方式:前言 前些天发现了一个巨牛的人工智能学习网站,…

阿里云配置服务器详细指南

阿里云服务器配置怎么选择合适&#xff1f;CPU内存、公网带宽和ECS实例规格怎么选择合适&#xff1f;阿里云服务器网aliyunfuwuqi.com建议根据实际使用场景选择&#xff0c;例如企业网站后台、自建数据库、企业OA、ERP等办公系统、线下IDC直接映射、高性能计算和大游戏并发&…

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;借助…

电商API接口——你搭建电商独立站电商应用的左膀右臂

当我们构建电商网站或应用时&#xff0c;常常需要获取淘宝商品的详细信息。为了实现这个功能&#xff0c;我们可以利用淘宝提供的开放平台API接口来获取商品数据。在这篇文章中&#xff0c;我们将学习如何设计一个商品详情API接口&#xff0c;并提供相应的代码示例。 首先&…

移动神器RAX3000M路由器不刷固件变身家庭云之五(高级应用):设置成maven私服

由于我们项目经常会使用一些自研的公共组件&#xff0c;把这些组件放在一个共同的maven私服&#xff0c;这样大家就可以自动下载这些组件了。 前面文章里&#xff0c;我们设置好了uhttpd和vsftpd两个服务&#xff0c;http服务把管理界面移到隐藏的子目录里了。 现在我们可以把…

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;面向消息…

Android11 Framework Vendor下自定义系统服务

Android11 Framework Vendor下自定义系统服务_android vendor app 配置-CSDN博客

利用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…

C语言-蓝桥杯2023年第十四届省赛真题-砍树

题目描述 给定一棵由 n 个结点组成的树以及 m 个不重复的无序数对 (a1, b1), (a2, b2), . . . , (am, bm)&#xff0c;其中 ai 互不相同&#xff0c;bi 互不相同&#xff0c;ai ≠ bj(1 ≤ i, j ≤ m)。 小明想知道是否能够选择一条树上的边砍断&#xff0c;使得对于每个 (a…

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

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