御坂10032号 发表于 2024-9-23 22:22

动手学深度学习(PyTorch版)- 【读书活动-心得分享】pytorch 张量数据运算

<p><strong><span style="font-size:24px;">简介</span></strong></p>

<p>&nbsp;</p>

<p>在本章节我讲介绍深度学习里的一个重要的数据结构即多维度的数组. 通过视频的学习和API的使用可以让大家更好的掌握张量的运算和转换等.</p>

<p>&nbsp;</p>

<p><strong><span style="font-size:24px;">正文</span></strong></p>

<p>&nbsp;</p>

<p>N维度数组是机器学习和神经网络中的主要数据结构</p>

<p>&nbsp;</p>

<p></p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p><meta charset="UTF-8" />三维数组可以用RGB图片进行理解, 宽高和RGB通道, 四维则为N个三维数组放在一起,五维类似视频(具有一个时间的维度)</p>

<p>&nbsp;</p>

<p> &nbsp; &nbsp;</p>

<p>创建数组</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>访问数组</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p><meta charset="UTF-8" /></p>

<p cid="n33" mdtype="paragraph">注意这个访问一列的是错误的, 正确的应该是 <strong>:1</strong></p>

<p cid="n35" mdtype="paragraph">子区域指的是, 从第一行开始进行访问,到第三行的开头, 不包括第三行. 访问第一行到第三行开头, 从第一列开始的所有元素</p>

<p cid="n41" mdtype="paragraph">[::3, ::2] 访问元素, 访问所有的行, 每三行一跳, ::2 访问所有列, 每两行一跳.</p>

<p cid="n41" mdtype="paragraph">&nbsp;</p>

<pre>
<code class="language-python"># -*- coding: utf-8 -*-
"""数据操作.ipynb

Automatically generated by Colab.

Original file is located at
    https://colab.research.google.com/drive/1-uLN5MuvAFSxmxk9r3ZLl327Ck7R6h86
"""

# 导入 torch
import torch

# 创建一个数据区间
x = torch.arange(12)

x

# 查看数据集的形状(向量, 数组)
x.shape

#查看数据集的大小(标量)
x.numel()

#改变数组的形状, 感觉和numpy一摸一样
X = x.reshape(3,4)

X

# 使用全0 或者全1 从特定分布中采样的数字
# 创建两个全0 或者全1的数组

torch.zeros((2,3,4))

# 创建一个数组, 包括四个5行六列的数组
torch.ones((2,3,4))

# 张量创建数组
torch.tensor([,])

arr =torch.tensor([[,],[,]])

arr.size()

arr.shape



#矩阵的运算, 如果定义的数据包含浮点数的话, 那么运算的类型实际为浮点型运算
x = torch.tensor()
y = torch.tensor()

x + y, x-y , x*y , x/y , x**y

#指数的运算

torch.exp(x)

# 连接张量

'''
假设 X 和 Y 的形状分别为 (2, 3, 4) 和 (2, 3, 4):
torch.cat((X, Y), dim=0):结果将是形状为 (4, 3, 4) 的张量(行数增加)。
torch.cat((X, Y), dim=1):结果将是形状为 (2, 6, 4) 的张量(列数增加)。
torch.cat((X, Y), dim=2):如果 X 和 Y 的最后一个维度相同(如 (2, 3, 4)),结果将是形状为 (2, 3, 8) 的张量(深度增加)。
'''
X = torch.arange(12, dtype=torch.float32).reshape(3,4)
Y = torch.tensor([,,])
torch.cat((X,Y), dim=0),torch.cat((X,Y), dim=1)
# 按照维度进行合并, 需要注意的是,这个地方有点抽象, 如果dimension为0的话,则是按行进行合并, 如果是1的话则是按照列合并

#判断两个矩阵是否相等

X == Y

# 对矩阵元素进行求和
X.sum()

# 这边有一个广播机制就是说,当两个变量的形状不同的时候(维度相同),进行数学操作,那么为了能够满足操作能够成立.那么广播机制回自动对其形状进行变换成相同的然后再进行像家

a = torch.arange(3).reshape((3,1))
b = torch.arange(2).reshape((1,2))
a,b

# 实际上由于广播机制,数组的形状变成了3,2 和 3,2 . 然后使用变形后的变量进行运算
a+b

# 元素的访问, access the last line
X,X[-1]

# line from 1 to 3 , except 3
X

# 改变元素内容

X = 9
X

# 区域赋值, 0-2 行不包括第二行
X = 12
X

# numpy 和 tensor的转换
A = X.numpy();
B = torch.tensor(A)
type(A), type(B)

# 将张量转换为PY数据类型的标量
a = torch.tensor()

a, a.item(), float(a), int(a)

</code></pre>

<p>&nbsp;</p>

<div></div>

<div></div>

<p>&nbsp;</p>

<p>虽然代码不是很多,但是理解起来还是非常费时的,视频长度才十分钟,学习和写笔记大概花了一个半小时.</p>

秦天qintian0303 发表于 2024-9-24 11:58

<p>张量计算的维度有限制吗?&nbsp;&nbsp;</p>

御坂10032号 发表于 2024-9-25 01:18

秦天qintian0303 发表于 2024-9-24 11:58
张量计算的维度有限制吗?&nbsp;&nbsp;

<p>我明天试一下, 这个张量计算 ppt上的好像是可以到4-5维的样子.&nbsp;</p>
页: [1]
查看完整版本: 动手学深度学习(PyTorch版)- 【读书活动-心得分享】pytorch 张量数据运算