DataWhale组队学pytorch-day1 线性回归 softmax 多层感知机 学习笔记

  • 参考资料:
  • 《动手学深度学习》中文版官网教材:http://zh.gluon.ai/ 
  • PyTorch中文文档:https://pytorch-cn.readthedocs.io/zh/stable/
  • 部分PyTorch代码来自GitHub开源仓库:https://github.com/ShusenTang/Dive-into-DL-PyTorch

1 线性回归

torch 用法:

1.1定义张量:torch.tensor

1.2定义参数,并初始化。随机初始化或者0初始化:

torch.randn([rows, cols], dtype = torch.float32, requires_grad = True)
#requires_grad = True 表示需要计算梯度以使用优化算法

1.3搭建模型,定义损失函数

1.4 读取数据,设置学习率和迭代次数

1.5 每步循环里,依次进行损失函数计算,梯度计算,变量更新,梯度置零操作

lr = 0.03
num_epochs = 5
for epoch in range(num_epochs):
    for X,y in data_iter(batch_size, features, labels):
        l = loss(net(X, w, b), y).sum()
        l.backward()
        sgd([w, b], lr, batch_size)
        w.grad.data.zero_()
        b.grad.data.zero_()
        # 梯度置零是为了防止梯度累加

学到的一个点,是课后习题的。分享一下,也是需要注意的地方

tensor有1维和2维,在做运算时需要保持维度一致。在定义变量或者数据处理的时候,个人觉得还是要偏向于使用二维张量来运算。否则1维和2维之间可能会广播运算导致错误的结果。

2. softmax

详细代码就不贴了,这里贴一个我自己一开始不太会的地方,就是multi-class的acc实现

def evaluate_accuracy(data_iter, net):
    acc_sum, n = 0.0, 0
    for X, y in data_iter:
        acc_sum += (net(X).argmax(dim=1) == y).float().sum().item()
        n += y.shape[0]
    return acc_sum/n

我看不明白是因为没有懂argmax方法是什么意思。它其实是返回一个维度上最大值的索引。

在此附上链接torch.tensor.argmax, 这篇文章解释的还蛮详细的。

哦还有一个是交叉熵的实现

def cross_entropy(y_hat, y):
    return  -torch.log(y_hat.gather(1, y.view(-1, 1)))

这里不太懂的是这个gather,为什么要这样。同样附上链接https://www.cnblogs.com/sdu20112013/p/12101172.html

 

你可能感兴趣的:(pytorch)