这里开始学习pytorch,在网上找到的60道题目,在运行过程中有我自己的想法和理解, import torch # 一, # 1.创建一个未初始化的5×3张量 empty空代表未初始化 # x = torch.empty(5,3) # print(x) # 2.创建一个随机初始化的5×3张量 # x = torch.rand(5,3) # print(x) # 3.创建一个5×3的0张量,类型为long # x = torch.zeros(5,3, dtype = torch.long) # print(x) # 4.直接从数组创建张量 # x = torch.tensor([5.5,3,6]) # print(x) # 5.创建一个5×3的单位张量,类型为double 6.从已有的张量创建相同维度的新张量,并且重新定义类型为float # rand_like 可以建立相同维度的新张量 # x = torch.ones(5, 3, dtype=torch.float) # print(x) # x = torch.rand_like(x, dtype=torch.float) # print(x) # 7.打印一个张量的维度 # x = torch.ones(5, 3) # print(x.size()) # 8.将两个张量相加 # y = torch.rand(5, 3) # print(x, '\n', y) # print(x + y) # 9.打印张量的第一列 # print(x[:, 1]) # 10.将一个4×4的张量resize成一个一维张量 # rand是均匀分布 randn是标准正态分布 # x = torch.randn(4, 4) # y = x.view(16) # print(x.size(), y.size()) # 11.将一个4×4的张量,resize成一个2×8的张量 # x = torch.randn(4, 4) # y = x.view(2, 8) # print(x, '\n', y) # print(x.size(), y.size()) # 12.从张量中取出数字 只对一个张量有用 # x = torch.randn(1) # print(x) # print(x.item()) # 小结:张量具有一维性,内存不支持维度概念,以平铺方式按序写入内存。(可以改变张量的维度) # 二, # 1.将张量装成numpy数组 # 可以直接将张量转换成numpy数组 # a = torch.ones(5) # print(a) # # b = a.numpy() # print(b) # 2.将张量+1,并观察上题中numpy数组的变化 # 张量的变化会动态改变数组的变化 # a.add_(1) # print(a) # print(b) # 3.从numpy数组创建张量 # from_numpy 函数可以实现从数组到张量的转变 # import numpy as np # a = np.ones(5) # b = torch.from_numpy(a) # print(a) # print(b) # 4.将numpy数组+1并观察上题中张量的变化 # numpy数组变化也会导致张量的变化 # np.add(a, 1, out=a) # print(a) # print(b) # 小结:张量转数组,其值指向的是最终存储地址 # 三 # 三.1张量的自动微分 # 自动微分 # 1.新建一个张量,并设置require_grad=True # require_grad=True 代表 记录为张量计算梯度,该值默认为False, # require_grad=True 将开始追踪在其上的所有操作 # x = torch.ones(2, 2, requires_grad=True) # print(x) # print(x.grad_fn) # 2.对张量进行任意操作(y = x + 2) # grad_fn该属性表示梯度函数, y = x + 2 中 x为叶子Tensor,这里y为非自己创建的Tensor,会自动被赋值grad_fn属性,该属性表示梯度函数 # 每个Tensor都有一个.grad_fn属性,该属性即创建该Tensor的Function,就是说该Tensor是不是通过某些运算得到的。若是,则grad_fn返回一个与 # 这些运算相关的对象,否则是None # y = x + 2 # print(y) # print(y.grad_fn) # 3.再对y进行任意操作 # torch.mean(input,dim=None,keepdim=False,out=None) # input计算平均值的张量,dim指定计算平均值的维度,keepdim指定是否保留计算平均值的维度,out指定输出张量的位置 # z = y * y * 3 # out = z.mean()#返回了一个输入张量Tensor中所有元素的平均值,返回值同样是tensor类型 # #out代表结果张量 # print(z) # print(out) # 小结:AddBackward:Add(加法)类型的运算 # MulBackward:Mul(乘法)类型的运算 # MeanBackward:Mean(平均值)类型的运算 # Backword可以进行反向传播 # 三.2 梯度 # 1.对out进行反向传播 # out.backward() # 2.打印梯度d(out)/dx # print(x.grad) # 创建一个结果为矢量的计算过程 (y=x * (2的n次方)) # x = torch.randn(3, requires_grad=True) # y = x * 2 # while y.data.norm() < 1000: #求范数 对张量y每个元素进行平方,然后求和,最后取平方根 即取L2范数 # y = y * 2 # print(x) # print(y) # 计算v = [0.1, 1.0, 0.0001]处的梯度 # v = torch.tensor([0.1, 1.0, 0.0001], dtype=torch.float) # y.backward(v) # print(x.grad) # 关闭梯度的功能 # 方法一 # print(x.requires_grad) # print((x ** 2).requires_grad) # # with torch.no_grad(): # print((x ** 2).requires_grad) # 方法二 # print(x.requires_grad) # y = x.detach() # print(y.requires_grad) # print(x.eq(y).all())
10-13
2984
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
06-18
5427
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交