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

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值