计算梯度(反向传播):y.backward()
控制梯度计算:梯度计算是有性能开销的,有些时候我们只是简单的运算,并不需要梯度
with torch.no_grad():冒号后跟不需要计算梯度只需要运算的表达式
如果不需要计算梯度-全局设置: torch.set_grad_enabled(False)
y = x**2 + 2 * x + 3
累计梯度:默认情况下,当我们重复对一个自变量进行梯度计算时,梯度是累加的,所以需要梯度清零
梯度清零:x.grad.zero_()
损失函数组件:
1.均方误差损失(MSE Loss) 函数: torch.nn.MSELoss
2.L1 损失(L1 Loss)也叫做MAE(Mean Absolute Error,平均绝对误差) 函数: torch.nn.L1Loss
3.交叉熵损失(Cross-Entropy Loss) 函数: torch.nn.CrossEntropyLoss(多用于多分类)
4.二元交叉熵损失(Binary Cross-Entropy Loss) 函数: torch.nn.BCELoss 或 torch.nn.BCEWithLogitsLoss (多用于二分类)
线性层组件:
torch.nn.Linear(in_features, out_features, bias=True)
优化器方法:
optim.SGD():优化器方法;是 PyTorch 提供的随机梯度下降(Stochastic Gradient Descent, SGD)优化器。
model.parameters():模型参数获取;是一个生成器,用于获取模型中所有可训练的参数(权重和 偏置)。
optimizer.zero_grad():梯度清零
optimizer.step():参数更新
构建数据类:
Dataset类
1. __init__ 方法 用于初始化数据集对象:通常在这里加载数据,或者定义如何从存储中获取数据的路径和方法。
2. __len__ 方法 返回样本数量:需要实现,以便 Dataloader加载器能够知道数据集的大小。
3. __getitem__ 方法 根据索引返回样本:将从数据集中提取一个样本,并可能对样本进行预处理或变换。
TensorDataset类:
源码:
def __init__(self, *tensors):
# size(0)在python中同shape[0],获取的是样本数量
# 用第一个张量中的样本数量和其他张量对比,如果全部相同则通过断言,否则抛异常
assert all(tensors[0].size(0) == tensor.size(0) for tensor in tensors)
self.tensors = tensors
def __getitem__(self, index):
return tuple(tensor[index] for tensor in self.tensors)
def __len__(self):
return self.tensors[0].size(0)
60万+

被折叠的 条评论
为什么被折叠?



