动手学习深度学习-task2-数据处理

学习目标:

  • 掌握Pytroch预备知识

学习内容:

  1. 数据操作
  2. 数据预处理
  3. 线代
  4. 矩阵计算
  5. 自动求导

学习时间:

  • 2023.3.24

学习过程:

1.数据操作

入门操作

// An highlighted block
import torch     #引入pytorhc包
#使用arange创建一个张量
x = torch.arange(12)

生成结果

// An highlighted block
x.shape() #获取张量的形状,可以理解为获取每个轴长度,此处为一维张量。

生成结果

x.numel() #计算张量中所有元素个数

生成结果

X = x.reshape(3, 4) #改变张量的形状 也可以指定一个参数,用-1自动计算出另一个维度

生成结果

torch.zeros((2, 3, 4)) #创建一个形状为(2,3,4)的张量,其中所有元素都设置为0

生成结果

torch.ones((2, 3, 4)) #创建一个形状为(2,3,4)的张量,其中所有元素都设置为1
torch.randn(3, 4) #创建一个形状为(3,4)的张量。 其中的每个元素都从均值为0、标准差为1的标准高斯分布(正态分布)中随机采样

#生成张张量形状上边相同,就不放结果图了
torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]) #通过提供包含数值的Python列表(或嵌套列表),来为所需张量中的每个元素赋予确定值

运算符

x = torch.tensor([1.0, 2, 4, 8]) 
y = torch.tensor([2, 2, 2, 2])
#同一形状的任意两个张量上调用按元素操作
x + y, x - y, x * y, x / y, x ** y  # **运算符是求幂运算

生成结果

torch.exp(x) #求幂函数
#张量的连结
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]])
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)
#dim=0 按照行(轴0)来连结 dim=1 按照列(轴1)来连结

生成结果

X == Y #逻辑运算 输出true或false
X.sum() #求和运算 输出单个元素张量

广播机制

广播机制的工作方式

1.通过适当复制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状。

2.对生成的数组执行按元素操作。

在大多数情况下,我们将沿着数组中长度为1的轴进行广播。

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

生成结果

a + b

生成结果
索引和切片

X[-1], X[1:3] #可以用[-1]选择最后一个元素,可以用[1:3]选择第二个和第三个元素]

生成结果

X[1, 2] = 9 #通过指定索引来将元素写入矩阵

生成结果

节省内存

运行一些操作可能会导致为新结果分配内存

# 我们可以使用切片表示法将操作的结果分配给先前分配的数组
Z = torch.zeros_like(Y)
print('id(Z):', id(Z))
Z[:] = X + Y
print('id(Z):', id(Z))
#如果在后续计算中没有重复使用X, 我们也可以使用X[:] = X + Y或X += Y来减少操作的内存开销。
before = id(X)
X += Y
id(X) == before

转换为其他Python对象

#转换为NumPy张量(ndarray)
A = X.numpy()
B = torch.tensor(A)
type(A), type(B)

生成结果

#要将大小为1的张量转换为Python标量,我们可以调用item函数或Python的内置函数。
a = torch.tensor([3.5])
a, a.item(), float(a), int(a)

生成结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值