深度学习基础知识-pytorch数据基本操作
1.深度学习基础知识
1.1 数据操作
1.1.1 数据结构
机器学习和神经网络的主要数据结构,例如
0维:叫标量,代表一个类别,如1.0
1维:代表一个特征向量。如 [1.0,2,7,3.4]
2维:就是矩阵,一个样本-特征矩阵,如: [[1.0,2,7,3.4 ]
[2.0,3,7,4.4 ] ],每一行是样本,每一列是特征;
3维:RGB图片(宽(列)x高(行)x通道) 三维数组,[[[ 1.0,2,7,3.4 ]
[2.0,3,7,4.4 ] ]
[[2.0,3,7,4.4 ]]]
4维:N个三维数组放在一起,如一个RGB图片的批量(批量大小x宽x高x通道)
5维:一个视频的批量(批量大小x时间x宽x高x通道)
1.1.2 创建数组
创建数组需要如下:
- 形状:例如3x4d矩阵
- 每个元素的数据类型:例如32位符点数
- 每个元素的值:例如全是0,或者随机数
访问数组
[1,:] 访问第一行的所有列。
[:,1]访问第一列把所有行查询出来
子区域:[1:3,1:] 代表访问1-2行的数据,虽然是3但是3是开区间,然后列是从第一列到最后都查询,因为是:嘛。
子区域:[::3,::2]访问一个带跳转的子区域,行里每三行眺一行,列里每两行眺一行
1.2 数据操作实现
!pip install torch
import torchx=torch.arange(12)
print(x)
结果:
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
返回的是一个张量,调用arange给12则把0-12之前的数字拿出来。
张量:是一种多维矩阵,是神经网络的基本数据结构。它的概念源于数学,具有最多八个维度。它是一种应用于机器学习,深度学习和其他人工智能应用的非常有用的数据结构。
张量可以被认为是子元素的多维数组。该子元素可以是实数、向量、矩阵或任何其他多维类型。张量提供了一种统一的方式来处理复杂的数据结构。而且,它的可视化表示也更加直观,清晰。
这意味着,当程序在计算机中运行时,它可以将各种类型的数据,比如图片、文本、语音等,组织成多维数组的组成部分。张量通常被用于吃进、学习和转换复杂的结构化输入(如图像)并进行预测。有了张量,程序可以更自由地传输和处理复杂数据,从而更快、更准确地开展预测。
我们可以通过张量的shape数学来访问张量的形状和张量中元素的总数。
x.shape
torch.Size([12])
# 元素总数
x.numel()
12
要改变一个张量的形状不改变元素数量和元素值,我们可以调用rehape函数。
# 将之前的标量数据转换为3x4矩阵
x=x.reshape(3,4)
print(x)
创建一个指定形状的全零张量(tensor)和全一张量。它接受一个或多个整数作为参数,表示张量的形状。
y = torch.zeros((2, 3, 4)) # 创建一个形状为(2,3,4)的张量,其中所有元素都设置为0,第一个参数代表创建几个3行4列的矩阵
print(y)
z = torch.ones((2, 3, 4)) # 创建一个形状为(2,3,4)的张量,其中所有元素都设置为1,第一个参数代表创建几个3行4列的矩阵
print(z)
通过提供包含数值的Python列表(或嵌套列表),来为所需张量中的每个元素赋予确定值。
b=torch.tensor([[2,1,4,3],[1,2,3,4]])
print(b)# 打印形状
print(b.shape)
可以在同一形状的任意两个张量上调用按元素操作加减乘除、幂运算等等
x=torch.tensor([1.0,2,4,8])
y=torch.tensor([2,2,2,2])
print(x+y)
print(x-y)
print(x*y)
print(x/y)
print(x**y) #**运算符是求幂运算,对每个x元素求二次方
# 给x每个元素做指数运算
print(torch.exp(x))
tensor([ 3., 4., 6., 10.])
tensor([-1., 0., 2., 6.])
tensor([ 2., 4., 8., 16.])
tensor([0.5000, 1.0000, 2.0000, 4.0000])
tensor([ 1., 4., 16., 64.])
tensor([2.7183e+00, 7.3891e+00, 5.4598e+01, 2.9810e+03])
可以把多个张量连结在一起, 把它们端对端地叠起来形成一个更大的张量
x=torch.arange(12,dtype=torch.float32).reshape((3,4))
y=torch.tensor([[2.0,1,4,3],[1,2,3,4],[4,3,2,1]])
print("x:",x)
print("y:",y)
print("xy组合按行:",torch.cat((x,y),dim=0))#按行连结两个矩阵
print("xy组合按列:",torch.cat((x,y),dim=1))#按列连结两个矩阵
也可以通过逻辑运算符构建二元张量
x==y
对张量中的所有元素进行求和,会产生一个元素的张量
print(x.sum())
tensor(66.)
即使形状不同,我们仍然可以调用广播机制来执行按元素操作 。但是维度需相同,就像下面都是2维
a=torch.arange(3).reshape((3,1))
b=torch.arange(2).reshape((1,2))
print("a:",a)
print("b:",b)
print(a+b)
执行完结果如下:其实将a里的列复制成和b对应的列一致,b要复制成行与a的一致,然后相加即可
∫a: tensor([[0],[1],[2]])
# 相当于复制成
# tensor([[0, 0],
# [1, 1],
# [2, 2]])b: tensor([[0, 1]])
tensor([[0, 1],[1, 2],[2, 3]])
# tensor([[0, 1], [0, 1], [0, 1]])
我们来取元素数据,
# -1取出最后一个元素
print(x[-1])
# [1:3]取出第二个和第三个元素
print(x[1:3])
原本的 x数据如下:
x: tensor([[ 0., 1., 2., 3.],[ 4., 5., 6., 7.],[ 8., 9., 10., 11.]])
取出数据结果如下:
tensor([ 8., 9., 10., 11.])
tensor([[ 4., 5., 6., 7.],[ 8., 9., 10., 11.]])
除读取外,我们还可以通过指定索引来将元素写入矩阵。
# 将第一行的第二列的数据改为9
x[1,2]=9
print(x)
j结果如下:
tensor([[ 0., 1., 2., 3.],[ 4., 5., 9., 7.],[ 8., 9., 10., 11.]])
也可以按区域赋值
# 取0-1行的所有列更改为12
x[0:2,:]=12
print(x)
结果如下:将第一个行和第二行的行列全部赋值成12了
tensor([[12., 12., 12., 12.],[12., 12., 12., 12.],[ 8., 9., 10., 11.]])
有时候运行一些操作可能会导致新的变量分配内存,如
# id(y)则是这个y的标识
before=id(y)
y=y+x
id(y)==before
由于中间操作了一步将x+y赋值给了y ,导致新开辟了空间,所以就等于false
结果:False
可以使用torch.zeros_like,这样更改了也会原地动作
z=torch.zeros_like(y)
print("id(z):",id(z))
print("z-before:",z)
z[:]=x+y
print("z-after:",z)
print("id(z):",id(z))
结果如下:
id(z): 139337924747696
z-before: tensor([[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]])
z-after: tensor([[26., 25., 28., 27.],[25., 26., 27., 28.],[20., 21., 22., 23.]])
id(z): 139337924747696
也可以这样使用y[:]=y+x或x+=y来保证原地操作:
before=id(y)
y[:]=y+x
id(y)==before
结果:true
除了上面的功能,还可以很容易的转换,如转换numpy张量
import numpy
e=x.numpy()
f=torch.tensor(e)print("numpy:",e)
print(f)print(type(e))
print(type(f))
结果如下:
numpy: [[12. 12. 12. 12.][12. 12. 12. 12.][ 8. 9. 10. 11.]]
tensor([[12., 12., 12., 12.],[12., 12., 12., 12.],[ 8., 9., 10., 11.]])
<class 'numpy.ndarray'>
<class 'torch.Tensor'>
#将大小为1的张量转换为python标量
a=torch.tensor([3.5])
print(a)
print(a.item)
print(float(a))
print(int(a))
结果:
tensor([3.5000])
<built-in method item of Tensor object at 0x7eba23772b10>
3.5
本章节学习李沐老师的《深度学习课》
相关文章:
深度学习基础知识-pytorch数据基本操作
1.深度学习基础知识 1.1 数据操作 1.1.1 数据结构 机器学习和神经网络的主要数据结构,例如 0维:叫标量,代表一个类别,如1.0 1维:代表一个特征向量。如 [1.0,2,7,3.4] 2维:就是矩…...
Springboot使用QueryDsl实现融合数据查询
SpringbootQueryDsl技术 1、添加依赖 <!--基于JPA--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!--QueryDSL支持--> <dependenc…...
解决方案 | 电子签打通消费电子行业数智化经营通路
技术迭代不断驱动产业快速增长,从PC电脑到手机平板、再到可穿戴设备的兴起,每一次设备的迭代都代表着技术为产品注入了新的发展动能。与此同时,消费电子设备迭代更新周期的不断缩短,市场增长疲缓等因素,也对行业的流转…...
JVM理论知识
一、JVM内存结构 java的内存模型主要分为5个部分,分别是:JVM堆、JVM栈、本地栈、方法区还有程序计数器,他们的用途分别是: JVM堆:新建的对象都会放在这里,他是JVM中所占内存最大的区域。他又分为新生区还…...
idea - 报错 Mybatis提示Tag name expected的问题< 小于号 无法识别
问题:Mybatis提示Tag name expected 原因: 当我们在mapper中编写sql语句的时候会发现使用"<“符号会提示一个Tag name expected。这是因为xml文件中不识别”<"符号和“&”符号。防止与xml本身的元素命名混淆,导致无法解…...
合宙Air724UG LuatOS-Air LVGL API--对象
对象 概念 在 LVGL 中,用户界面的基本构建块是对象。例如,按钮,标签,图像,列表,图表或文本区域。 属性 基本属性 所有对象类型都共享一些基本属性: Position (位置) Size (尺寸) Parent (父母…...
Java将PDF文件转为Word文档
Java将PDF文件转为Word文档 一、创建Springboot Maven项目 二、导入依赖信息 <repositories><repository><id>com.e-iceblue</id><url>https://repo.e-iceblue.cn/repository/maven-public/</url></repository></repositories&g…...
vite创建项目命令
1.第一步运行创建命令(npm) npm create vitelatest也可以使用yarn yarn create vite还可以 pnpm create vite注意的地方:首次创建的时候会出现这个 Need to install the following packages:create-vitelatest Ok to proceed? (y) 直接y就…...
解决Pandas KeyError: “None of [Index([...])] are in the [columns]“问题
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
前端加springboot实现Web Socket连接通讯以及测试流程(包括后端实现心跳检测)
【2023】前端加springboot实现Web Socket连接通讯(包括后端实现心跳检测) 一级目录二级目录三级目录 前言一、Web Socket 简绍1 为什么用 websocket? 二、代码实现1、前端(html)1.1、无前端向后端发送消息1.2、有前端向…...
node使用高版本的oracledb导致连接oracle的Error: NJS-138异常
异常信息如下 Error: NJS-138: connections to this database server version are not supported by node-oracledb in Thin mode 我的oracle版本是11g,之前的使用正常,今天却报错了,显示不支持thin模式,后面回退版本就可以了。...
RabbitMQ手动签收消息
RabbitMQ手动签收消息 这里讲解SpringBoot使用RabbitMQ进行有回调的用法和消费者端手动签收消息的用法。 1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"h…...
Unity 3d角色展示脚本(旋转 平移 缩放)展示界面
不考虑性能 很简陋的一个功能,主要是用于角色渲染的观察用,比simplecontroller要好用一点 using System; using UnityEngine;public class CharacterViewer : MonoBehaviour {public Transform target; // 人物模型的Transformpublic float rotationSpee…...
Spring Boot 将 Word 转换为 PDF
首先,确保项目中添加了对Apache POI和Apache PDFBox的依赖。可以在你的 pom.xml 文件中添加以下依赖: <dependencies><!-- Apache POI --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</arti…...
【PHP面试题82】system和exec是用来做什么的?有什么区别
文章目录 🚀一、前言,PHP中system和exec命令的作用🚀二、system()函数🚀三、exec()函数🚀四、区别和应用场景🔎4.1 使用system()函数的应用场景🔎4.2 使用exec()函数的应用场景🔎4.3…...
05-微信小程序常用组件-表单组件
05-微信小程序常用组件-表单组件 文章目录 表单组件button 按钮案例代码 form 表单案例代码 image 图片支持长按识别的码案例代码 微信小程序包含了六大组件: 视图容器、 基础内容、 导航、 表单、 互动和 导航。这些组件可以通过WXML和WXSS进行布局和样式设…...
Lucky player —— Java 项目(Spring Boot)
一、项目介绍 项目名称:lucky player 项目的主要功能:本系统主要功能为构建了一个用户分享音乐的平台,普通用户不进行登录即可收听其他用户已经发布的专辑中的音乐。 作为博主则可以在该平台上传音频,以及在线音频录制上传。音频上…...
ios 声网agora 音视频直播场景下的集成总结
文章目录 一、前言二、视频会议场景2.1 场景描述2.2 功能列表三、电商直播场景3.1 场景描述3.2 功能列表3.3 技术方案四、声网iOS SDK集成4.1 集成4.2 示例demo4.3 核心代码4.3.1 初始化4.3.2 加入频道4.3.3 切换身份4.4.4 连麦4.4 相关问题4.4.1 监听观众角色用户事件五、相关…...
mysql 、sql server 临时表、表变量、
sql server 临时表 、表变量 mysql 临时表 创建临时表 create temporary table 表名 select 字段 [,字段2…,字段n] from 表...
15. Canvas制作汽车油耗仪表盘
1. 说明 本篇文章在14. 利用Canvas组件制作时钟的基础上进行一些更改,想查看全面的代码可以点击链接查看即可。 效果展示: 2. 整体代码 import QtQuick 2.15 import QtQuick.Controls 2.15Item{id:rootimplicitWidth: 400implicitHeight: implicitWi…...
解决git上传远程仓库时的最大文件大小限制
git默认限制最大的单文件100M,当某个文件到达50M时会给你提示。解决办法如下 首先,打开终端,进入项目所在的文件夹; 输入命令:git config http.postBuffer 524288000 执行完上面的语句后输入:git config…...
Midjourney API 国内申请及对接方式
在人工智能绘图领域,想必大家听说过 Midjourney 的大名吧! Midjourney 以其出色的绘图能力在业界独树一帜。无需过多复杂的操作,只要简单输入绘图指令,这个神奇的工具就能在瞬间为我们呈现出对应的图像。无论是任何物体还是任何风…...
第一章 文件的输入和输出
一 创建一个文件,并写入数据 #include <stdio.h> int main(void) {FILE *fp;fp= fopen("test.txt","w+");fprintf...
java面试基础 -- 深克隆 浅克隆
引例 说到java的克隆你还记得多少? 一说到克隆你可能就会想起来那个接口, 没错, 他就是Cloneable Cloneable是java里面内置的很常用的接口, 我们说 Object类中也有一个clone方法: 但是要想合法调用 clone 方法, 必须要先实现 Clonable 接口, 否则就会抛出 CloneNotSupportedEx…...
网络安全在医疗行业中的重要性
不可否认,现代世界见证了技术和医疗行业的交织,塑造了我们诊断、治疗和管理健康状况的新方式。随着电子健康记录取代纸质文件,远程医疗缩短了患者和医疗服务提供者之间的距离,数字化转型既是福音,也是挑战。最近的全球…...
elemenPlus ElMessage 字符串如何换行问题
因为后端返回的数据是一长串,而且带有\r,\n等换行符,但是并没有生效。前端写法: // 抛出错误ElMessage.error(msg);我们知道\r,\n,\r\n 是在不同系统下的换行符的表示,但在JavaScript返回字符串中并没有生效…...
Linux socket网络编程
一、主机字节序列和网络字节序列 主机字节序列分为大端字节序列和小端字节序列,不同的主机采用的字节序列可能不同。大端字节序列是指一个整数的高位字节存储在内存的低地址处,低位字节存储在内存的高地址处。小端字节序列是指整数的高位字节存储在内存…...
【广州华锐互动】牲畜养殖VR模拟实操系统为传统教育注入新的生命力
随着科技的不断发展,虚拟现实(VR)技术已经逐渐走进我们的生活。在农业领域,VR技术的应用也日益广泛,为现代农业人才培养提供了新的途径。 由广州华锐互动开发的“牲畜养殖VR模拟实操系统”引起了广泛关注,系统包含了鸡、猪、牛、马…...
JavaScript基础(Dom操作)
目录 一,BOM模型1.1,BOM可实现功能 二,Window对象的常用属性2.1,Window对象的常用方法2.1-1,open()和close()方法 三,History对象四,Location对象五,Document对象的常用方法六&#…...
.NET6.0 System.Drawing.Common 通用解决办法
最近有不少小伙伴在升级 .NET 6 时遇到了 System.Drawing.Common 的问题,同时很多库的依赖还都是 System.Drawing.Common ,而 .NET 6 默认情况下只在 Windows 上支持使用,Linux 上默认不支持这就导致在 Linux 环境上使用会有问题,…...
电商行业接单平台/网络优化工程师主要负责什么工作
2019独角兽企业重金招聘Python工程师标准>>> 当前日志系统常用的有elk(elasticsearch logstash kibana),不过很多公司不喜欢用logstash,而会用很多其他性能好、资源利用少的日志采集软件,其中rsyslog会是很…...
在建设厅网站上下载资质标准/网站推广优化业务
debug sync是MySQL提供的一种代码调试,问题分析工具, 它集成在MySQL的内部。具体作用是: 让代码执行到某个特殊的位置(同步点)时触发暂停,等待指定的某个或者多个signal在激活同步点,并且被触发时,可以向别…...
新开传奇网站新开网/郑州网站托管
「龙蜥开发者说」第 17 期来了!开发者与开源社区相辅相成,相互成就,这些个人在龙蜥社区的使用心得、实践总结和技术成长经历都是宝贵的,我们希望在这里让更多人看见技术的力量。本期故事,我们邀请了龙蜥社区开发者柳辛…...
网站详情页怎么做/软件制作
解决方案: https://www.cnblogs.com/VAllen/p/Visual-C-Plus-Plus-Collection-Download.html 下载 Visual C 2008 SP1 可再发行文件(x64) https://www.microsoft.com/zh-CN/download/confirmation.aspx?id5582 删除高于2008版本的 Visual …...
如何网站做外贸生意/网站查询ip
概述为了增加用户体验,可能要求在一个APP中打开另外一个APP的需求,一般分为三种:显式调用跳转隐式调用跳转URL Scheme跳转代码用到的一些公共方法,当打开APP时,检测到第三方APP没安装时调到应用市场进行下载࿰…...
临海建设局网站导航/星巴克营销策划方案
导读: 对于程序员来说,每个人拥有一两个服务器进行学习是很有必要的,弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,可帮助您打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定…...