PyTorch实战-实现神经网络图像分类基础Tensor最全操作详解(二)

news2025/1/11 21:04:40

前言

PyTorch可以说是三大主流框架中最适合初学者学习的了,相较于其他主流框架,PyTorch的简单易用性使其成为初学者们的首选。这样我想要强调的一点是,框架可以类比为编程语言,仅为我们实现项目效果的工具,也就是我们造车使用的轮子,我们重点需要的是理解如何使用Torch去实现功能而不要过度在意轮子是要怎么做出来的,那样会牵扯我们太多学习时间。以后就出一系列专门细解深度学习框架的文章,但是那是较后期我们对深度学习的理论知识和实践操作都比较熟悉才好开始学习,现阶段我们最需要的是学会如何使用这些工具。

深度学习的内容不是那么好掌握的,包含大量的数学理论知识以及大量的计算公式原理需要推理。且如果不进行实际操作很难够理解我们写的代码究极在神经网络计算框架中代表什么作用。不过我会尽可能将知识简化,转换为我们比较熟悉的内容,我将尽力让大家了解并熟悉神经网络框架,保证能够理解通畅以及推演顺利的条件之下,尽量不使用过多的数学公式和专业理论知识。以一篇文章快速了解并实现该算法,以效率最高的方式熟练这些知识。


博主专注数据建模四年,参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。此专栏的目的就是为了让零基础快速使用各类数学模型、机器学习和深度学习以及代码,每一篇文章都包含实战项目以及可运行代码。博主紧跟各类数模比赛,每场数模竞赛博主都会将最新的思路和代码写进此专栏以及详细思路和完全代码。希望有需求的小伙伴不要错过笔者精心打造的专栏。
一文速学-数学建模常用模型


本文接上篇文章,内容太多了分开细写:PyTorch实战-实现神经网络图像分类基础Tensor最全操作详解(一)_fanstuck的博客-CSDN博客

PyTorch数据结构-Tensor

五、Tensor数学运算

先创建两个展示的Tensor方便我们观察运算规则:

import torch

# 创建一个张量
tensor_a = torch.tensor([[1, 2], [3, 4]])
tensor_b = torch.tensor([[5, 6], [7, 8]])

1.张量的加减法

# 张量的加法
tensor_sum = tensor_a + tensor_b
tensor_sum
tensor([[ 6,  8],
        [10, 12]])
# 张量的减法
tensor_diff = tensor_a - tensor_b
tensor_diff

tensor([[-4, -4],
        [-4, -4]])

行列对应相加减。

2.张量的乘除法

# 张量的乘法
tensor_product = tensor_a * tensor_b
tensor_product
tensor([[ 5, 12],
        [21, 32]])
# 张量的除法
tensor_div = tensor_a / tensor_b
tensor_div

tensor([[0.2000, 0.3333],
        [0.4286, 0.5000]])

 行列对应相乘除。

3.张量的开平方

# 张量的平方
tensor_square = torch.square(tensor_a)
tensor_square

tensor([[ 1,  4],
        [ 9, 16]])
# 张量的开方
tensor_sqrt = torch.sqrt(tensor_a)
tensor_sqrt

tensor([[1.0000, 1.4142],
        [1.7321, 2.0000]])

  行列对应相开平方。

4.张量的指数运算

# 张量的指数运算
tensor_exp = torch.exp(tensor_a)
tensor_exp

tensor([[ 2.7183,  7.3891],
        [20.0855, 54.5981]])

 5.张量的对数运算

# 张量的对数运算
tensor_log = torch.log(tensor_a)
tensor_log

tensor([[0.0000, 0.6931],
        [1.0986, 1.3863]])

 6.张量逐元素相乘

# 张量逐元素相乘
tensor_mul=torch.mul(tensor_a, tensor_b)
tensor_mul

tensor([[ 5, 12],
        [21, 32]])

和乘法是一致的。

7.张量矩阵乘法

#矩阵乘法
tensor_mm=torch.mm(tensor_a, tensor_b)
tensor_mm

tensor([[19, 22],
        [43, 50]])

 六、广播原则(Broadcasting)

当在 PyTorch 中进行张量操作时,如果两个张量的形状不匹配,PyTorch 将尝试通过广播来使它们的形状相容。

import torch

# 创建一个3x2的张量
tensor_a = torch.tensor([[1, 2], [3, 4], [5, 6]])

# 创建一个1x2的张量
tensor_b = torch.tensor([[10, 20]])

# 进行相加操作
result = tensor_a + tensor_b

# 输出结果
print(result)

 tensor_b 的形状是 (1, 2),与 tensor_a 的形状 (3, 2) 匹配,PyTorch会自动将 tensor_b 在需要的维度上进行复制以匹配 tensor_a 的形状,然后进行相加操作。

tensor([[11, 22],
        [13, 24],
        [15, 26]])

 七、Tensor聚合操作

1.求和(sum)

import torch

# 创建一个张量
tensor = torch.tensor([[1, 2], [3, 4], [5, 6]])

# 对所有元素求和
result_sum = torch.sum(tensor)
print(result_sum)

tensor(21)

2.均值(Mean)

import torch

# 创建一个张量,数据类型为浮点数
tensor = torch.tensor([[1, 2], [3, 4], [5, 6]], dtype=torch.float32)

# 计算所有元素的平均值
result_mean = torch.mean(tensor)
print(result_mean)

tensor(3.5000)

 3.最大值(Max)和最小值(Min)

最大值:

import torch

# 创建一个张量
tensor = torch.tensor([[1, 2], [3, 4], [5, 6]])

# 找到所有元素中的最大值
result_max = torch.max(tensor)
print(result_max)

tensor(6)

最小值:

import torch

# 创建一个张量
tensor = torch.tensor([[1, 2], [3, 4], [5, 6]])

# 找到所有元素中的最小值
result_min = torch.min(tensor)
print(result_min)

tensor(1)

 4.指定维度上的聚合操作

import torch

# 创建一个张量
tensor = torch.tensor([[1, 2], [3, 4], [5, 6]])

# 沿着行的方向对列进行求和(第0维)
result_row_sum = torch.sum(tensor, dim=0)
print(result_row_sum)

tensor([ 9, 12])

 八、矩阵操作

矩阵乘法上述已经给出操作,这里更全面介绍一下矩阵的常用操作:

1.矩阵转置

import torch

# 创建一个矩阵
A = torch.tensor([[1, 2], [3, 4], [5, 6]])

# 矩阵转置
result = torch.transpose(A, 0, 1)
print(result)

 2.计算矩阵的逆

import torch

# 创建一个可逆矩阵
A = torch.tensor([[1.0, 2.0], [3.0, 4.0]], dtype=torch.float32)

# 计算逆矩阵
result = torch.inverse(A)
print(result)

 

tensor([[-2.0000,  1.0000],
        [ 1.5000, -0.5000]])

3.矩阵求迹

import torch

# 创建一个可逆矩阵
A = torch.tensor([[1.0, 2.0], [3.0, 4.0]], dtype=torch.float32)

# 计算逆矩阵
result = torch.inverse(A)
print(result)

 

tensor(5)

 那么到这里学习的Tensor基本操作已经够支撑我们使用PyTorch了,接下需要我们再学习一下Variable就可以开始实战项目了。

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。


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

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

相关文章

开始使用Filebeat

认识Beats Beats是用于单用途数据托运人的平台。它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到Logstash或Elasticsearch。 (画外音:通俗地理解,就是采集数据,并上报到Logstash或Elasticsearch&…

用matlab在hfss中建模

hfss可以导入vbs语言建模 怎么生成建模的vbs文档? 1.在hfss中建模建一遍 导出建模的vbs,然后笔记本打开vbs,需要改的话直接改。 参考 https://blog.csdn.net/m0_56117494/article/details/128007860 一文 这个方法朴实无华 但是需要写vbs语言…

英语单词(6)

1.person 人 2.start 开始 3.menu 菜单 4.login 登录 5.main 主要的 6.document 文档 7.display 显示 8.method 方法,条理 9.version 版本 10parameter 参数

Leecode1160: 拼写单词

直接使用一个哈希表存整体的结果,一个临时的哈希表每次算一遍,但是1是要设置标志位来判断最后是否正确并加上长度,2是千万要记得每次新建一个空间来存哈希表绝对不能不空间就等于,会出事!!

【小吉送书—第三期】Linux私教课:技术内核与企业运维篇

文章目录 🍔查找⭐find命令🎈按文件名🎈按拥有者🎈查找Linux系统下大于200M的文件 ⭐locate命令🎈使用方法 ⭐which命令(查找指令的,而不是文件)🎈使用方法 ⭐grep命令和…

Appium混合页面点击方法tap的使用

原生应用开发,是在Android、IOS等移动平台上利用官方提供的开发语言、开发类库、开发工具进行App开发;HTML5(h5)应用开发,是利用Web技术进行的App开发。目前,市面上很多app都是原生和h5混合开发&#xff0c…

【推荐】SpringMVC与JSON数据返回及异常处理机制的使用

🎬 艳艳耶✌️:个人主页 🔥 个人专栏 :《【推荐】Spring与Mybatis集成整合》 ⛺️ 生活的理想,为了不断更新自己 ! 1.JSON 在SpringMVC中,JSON数据返回通常是通过使用ResponseBody注解将Java对象转换为JSO…

2023年有哪些值得推荐的深度学习书?

深度学习指的是用一种特定的方法来解决一些机器学习的问题。 这种方法的中心思想是:基于一系列的离散的层(layer) 构建机器学习算法。如果将这些层 垂直堆叠,就说这个结果是有深度 (depth)的,或…

淘宝新品店铺运营必做的任务!

首先我们需要知道,新品上线前需要进行私域预热,以便达到上新后的销量效果,那上线后的运营又该怎么做呢? “ 完成新品孵化任务 进入【千牛后台】-【商品】-【新品运营】 这里可以看到淘宝针对新品扶持新开的板块,可以…

遥测终端机RTU助力城市内涝监测系统

一、背景概述 2023年第5号台风“杜苏芮”,周末登陆福建晋江,一波未平一波又起,卡努台风也进入了48小时警戒线,台风侵袭给城市基础设施和居民生活带来了严重的影响。后面第11号台风“海葵”号随之带来了更多城市内涝问题&#xff0…

Mobile Vision Transformer-based Visual Object Tracking

论文作者:Goutam Yelluru Gopal,Maria A. Amer 作者单位:Concordia University 论文链接:https://arxiv.org/pdf/2309.05829v1.pdf 项目链接:https://github.com/goutamyg/MVT 内容简介: 1)方向&#…

添加Typora主题皮肤

到官网下载喜欢的主题皮肤,比如【vue风格】 https://theme.typora.io 下载压缩包 打开 typora 主题皮肤文件夹 将解压后文件夹中的 vue文件夹 和 vue.css 复制到 主题皮肤文件夹中 重启 typora ,主题菜单中选择 新装的 vue 皮肤即可

华为云云耀云服务器L实例评测|基于云耀云服务器部署Samba服务

本实验将使用华为云云耀云服务器L实例,使用CentOS 7.9系统,搭建部署Samba服务器,并在本地Windows端进行访问。 文章目录 1、samba介绍2、环境准备3、安装samba软件包4、修改smb.conf配置文件5、添加访问samba的用户6、Windows下访问Samba服务…

三、数学建模之非线性规划

1、定义 2、例题matlan代码求解 一、定义 1.非线性规划(Nonlinear Programming,简称NLP)是一种数学优化问题的方法,它处理的目标函数或约束条件包含非线性项。与线性规划不同,非线性规划涉及到在非线性约束下寻找最优…

【Y 新闻】YMatrix携手三一集团,荣获“2023爱分析·数据库最佳实践案例”

2023 年 8 月 16 日,由爱分析主办的第五届数据智能高峰论坛在北京 JW 万豪酒店成功举办。本次论坛以“激活数据资产,释放数据价值”为主题,聚焦企业在数据能力和数据应用建设过程中所面临的系列问题。会上,由 YMatrix 与三一集团携…

iPhone15发布,苹果和台积电的牛皮都破了,3纳米没那么神奇

在发布会之前,A17处理器和3纳米工艺被吹得神乎其神,随着iPhone15的发布,两者也终于在人们面前显示出真面目,事实就是先进工艺并没那么厉害,多花的钱并不值。 苹果在发布会上表示A17Pro处理器的CPU性能最高提升10%&…

背包问题---怎么选取物品,可以使得背包装的物品价值最大?

原文: https://zhuanlan.zhihu.com/p/567560364 1)0-1背包问题的描述 现在有四种物品,每种物品只有1件,它们的重量与价值如下表。 现在有一个背包,总容量为8。问怎么选取物品,可以使得背包装的物品价值…

C#,《小白学程序》第二十三课:大数的除法(BigInteger Divide)

1 文本格式 /// <summary> /// 比较a&#xff0c;b的大小&#xff0c;返回1&#xff0c;0&#xff0c;-1 /// 数据从低位&#xff08;右&#xff09;往高位&#xff08;左&#xff09;存储; /// </summary> /// <param name"a"></param> ///…

Linux(下)

一、 对netstat的补充 1.进程管理 在杀死进程时&#xff0c;不可以杀死其他用户的进程。 查看指定进程时&#xff0c;下图的第二行 是ps -ef | grep tail 命令执行的进程 kill -9 进程号 也可以写作 kill -s 9 进程号 机器人&#xff1a; 2.查看主机状态 将进程的信息分三…

使用新版Maven-mvnd快速构建项目

目前我们项目的构建方式多数是 maven、gradle&#xff0c;但是 maven 相对 gradle 来说&#xff0c;构建速度较慢&#xff0c;特别是模块相对较多的时候&#xff0c;构建速度更加明显。但是我们将项目由 maven 替换为 gradle 相对来说会比较麻烦&#xff0c;成本较高。于是我们…