开始学习Pytorch

这里开始学习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())
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值