基本操作
张量与矩阵、向量、标量的关系是怎么样的?
标量表示值, 矢量表示位置, 张量表示整个空间。可以认为标量是0阶张量,向量是1阶。
Variable“赋予”张量什么功能?
Variable是torch.autograd中的数据类型,主要用于封装Tensor,使得tensor可以进行自动求导。
主要有五个属性:
1.data:被包装的Tensor
2.grad:data的梯度
3.grad_fn:创建Tensor的Function(创建张量所用到的方法,如加法或乘法),是自动求导的关键
4.requires.grad:指示张量是否需要梯度,不需要梯度的张量可以设置为false
5.is_leaf:指示张量在计算图中是否是叶子结点。
采用torch.from_numpy创建张量,并打印查看ndarray和张量数据的地址;
import torch
import numpy as np
x = np.zeros((3, 3))
y = torch.from_numpy(x)
print(y)
print(id(y))#返回地址
创建张量的三种方法
1.直接创建
2.依据数值
3.依据概率分布
见https://www.cnblogs.com/sakuraie/p/13341453.html
静态图和动态图的区别
动态图:搭建和运算同时进行
静态图:先搭建图,后运算
梯度清零
w = torch.tensor([1.], requires_grad=True)
x = torch.tensor([2.], requires_grad=True)
for i in range(4):
a = torch.add(w, x)
b = torch.add(w, 1)
y = torch.mul(a, b)
y.backward()
print(w.grad)
w.grad.zero_()#不清零的话会累积
# w.add_(1)
#"""
#autograd小贴士:
# 梯度不自动清零
# 依赖于叶子结点的结点,requires_grad默认为True
# 叶子结点不可执行in-place
###"""
此处requires_grad=True代表这个节点需要计算梯度。
数据读取
pytorch建模流程一般是:
数据——模型——损失函数——优化器,几个部分,DataLoader处理数据部分。
DataLoader
transforms
train_transform = transforms.Compose([#有序组合transforms方法
transforms.Resize((32, 32)),
transforms.RandomCrop(32, padding=4),#卷积裁减
transforms.ToTensor(), # 转成张量并归一化
transforms.Normalize(norm_mean, norm_std),#标准化
])
数据标准化能够加快模型的收敛