深度学习基础知识-pytorch数据基本操作

这篇具有很好参考价值的文章主要介绍了深度学习基础知识-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 ] ],每一行是样本,每一列是特征;

深度学习基础知识-pytorch数据基本操作,Ai与大数据,Python,深度学习,笔记,人工智能

               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通道)

深度学习基础知识-pytorch数据基本操作,Ai与大数据,Python,深度学习,笔记,人工智能

1.1.2 创建数组 

创建数组需要如下:

  • 形状:例如3x4d矩阵
  • 每个元素的数据类型:例如32位符点数
  • 每个元素的值:例如全是0,或者随机数

深度学习基础知识-pytorch数据基本操作,Ai与大数据,Python,深度学习,笔记,人工智能

 访问数组

 [1,:] 访问第一行的所有列。

[:,1]访问第一列把所有行查询出来

深度学习基础知识-pytorch数据基本操作,Ai与大数据,Python,深度学习,笔记,人工智能

 子区域:[1:3,1:] 代表访问1-2行的数据,虽然是3但是3是开区间,然后列是从第一列到最后都查询,因为是:嘛。

深度学习基础知识-pytorch数据基本操作,Ai与大数据,Python,深度学习,笔记,人工智能

 子区域:[::3,::2]访问一个带跳转的子区域,行里每三行眺一行,列里每两行眺一行深度学习基础知识-pytorch数据基本操作,Ai与大数据,Python,深度学习,笔记,人工智能

 1.2 数据操作实现

!pip install torch 
import torch

x=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)

深度学习基础知识-pytorch数据基本操作,Ai与大数据,Python,深度学习,笔记,人工智能 

创建一个指定形状的全零张量(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)

深度学习基础知识-pytorch数据基本操作,Ai与大数据,Python,深度学习,笔记,人工智能

 通过提供包含数值的Python列表(或嵌套列表),来为所需张量中的每个元素赋予确定值。

b=torch.tensor([[2,1,4,3],[1,2,3,4]])
print(b)

# 打印形状
print(b.shape)

深度学习基础知识-pytorch数据基本操作,Ai与大数据,Python,深度学习,笔记,人工智能

可以在同一形状的任意两个张量上调用按元素操作加减乘除、幂运算等等

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))#按列连结两个矩阵

深度学习基础知识-pytorch数据基本操作,Ai与大数据,Python,深度学习,笔记,人工智能

也可以通过逻辑运算符构建二元张量

x==y

深度学习基础知识-pytorch数据基本操作,Ai与大数据,Python,深度学习,笔记,人工智能

 对张量中的所有元素进行求和,会产生一个元素的张量

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

本章节学习李沐老师的《深度学习课》文章来源地址https://www.toymoban.com/news/detail-673632.html

到了这里,关于深度学习基础知识-pytorch数据基本操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习基础知识整理

    Auto-encoders是一种人工神经网络,用于学习未标记数据的有效编码。它由两个部分组成:编码器和解码器。编码器将输入数据转换为一种更紧凑的表示形式,而解码器则将该表示形式转换回原始数据。这种方法可以用于降维,去噪,特征提取和生成模型。 自编码器的训练过程

    2024年01月17日
    浏览(52)
  • 深度学习torch基础知识

    detach是截断反向传播的梯度流 将某个node变成不需要梯度的Varibale。因此当反向传播经过这个node时,梯度就不会从这个node往前面传播。 拼接:将多个维度参数相同的张量连接成一个张量 torch.nn.DataParallel(module, device_ids=None, output_device=None, dim=0) module即表示你定义的模型,devic

    2024年02月13日
    浏览(48)
  • 深度学习基础知识神经网络

    1. 感知机 感知机(Perceptron)是 Frank Rosenblatt 在1957年提出的概念,其结构与MP模型类似,一般被视为最简单的人工神经网络,也作为二元线性分类器被广泛使用。通常情况下指单层的人工神经网络,以区别于多层感知机(Multilayer Perceptron)。尽管感知机结构简单,但能够学习

    2024年02月03日
    浏览(53)
  • 深度学习基础知识-感知机+神经网络的学习

    参考书籍:(找不到资源可以后台私信我) 《深度学习入门:基于Python的理论与实现 (斋藤康毅)》 《Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition (Aurelien Geron [Géron, Aurélien])》 机器学习和深度学习的区别: Perceptron(感知机) 感知机就是一种接收多种输入信

    2023年04月26日
    浏览(60)
  • 深度学习基础知识(三)-线性代数的实现

    1.标量使用 标量由只有一个元素的张量表示,标量可以做最简单的计算。 结果: 2.向量使用 向量:将标量值组成的列表就是向量 结果: 访问张量的长度 只有一个轴的张量,形状只有一个元素 创建一个二维矩阵5行4列,然后将矩阵做转置,轴对称的一个转置 结果:其实就是把

    2024年02月10日
    浏览(60)
  • 深度学习TensorFlow2基础知识学习前半部分

    目录 测试TensorFlow是否支持GPU: 自动求导:  数据预处理 之 统一数组维度  定义变量和常量  训练模型的时候设备变量的设置 生成随机数据 交叉熵损失CE和均方误差函数MSE  全连接Dense层 维度变换reshape 增加或减小维度 数组合并 广播机制: 简单范数运算  矩阵转置 框架本

    2024年02月04日
    浏览(47)
  • 现代C++中的从头开始深度学习【1/8】:基础知识

            提及机器学习框架与研究和工业的相关性。现在很少有项目不使用Google TensorFlow或Meta PyTorch,在于它们的可扩展性和灵活性。 也就是说,花时间从头开始编码机器学习算法似乎违反直觉,即没有任何基本框架。然而,事实并非如此。自己对算法进行编码可以清晰而

    2024年02月13日
    浏览(44)
  • 计算机视觉基础知识(十二)--神经网络与深度学习

    一种机器学习的算法 一般有输入层--隐藏层--输出层 隐藏层数量多于两个的称为深度神经网络; 输入的是特征向量; 特征向量代表的是变化的方向; 或者说是最能代表这个事物的特征方向; 权重是特征值,有正有负,加强或抑制; 权重的绝对值大小,代表输入信号对神经元的影响大小

    2024年02月21日
    浏览(59)
  • 【Pytorch基础知识】数据的归一化和反归一化

    一张正常的图,或者说是人眼习惯的图是这样的: 但是,为了 神经网络更快收敛 ,我们在深度学习网络过程中 通常需要将读取的图片转为tensor并归一化 (此处的归一化指 transforms .Normalize()操作)输入到网络中进行系列操作。 如果将转成的tensor再直接转为图片,就会变成下

    2023年04月09日
    浏览(84)
  • 栈和队列(基础知识和基本操作)

    栈: 1.栈:在表尾进行插入和删除的操作受限的线性表。 2.逻辑结构:线性结构【一对一的关系】 3.存储结构:顺序存储【顺序栈】、链式存储【链栈】 4.栈的特点: 先进后出 【first in last out FILO表】 后进先出【last in first out LIFO表】 栈空:下标top==-1,栈满:下标top==栈最大

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包