动手学深度学习第三章课后习题

这一章的课后题基本都是理论推导,自己会了但没整理,所以当个答案搬运工,记录一下hhh。
原文章:https://datawhalechina.github.io/d2l-ai-solutions-manual/#/ch03/ch03?id=_31-%e7%ba%bf%e6%80%a7%e5%9b%9e%e5%bd%92

3.1 线性回归

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

3.2 线性回归的从0开始实现

在这里插入图片描述
在这里插入图片描述

import torch

# 生成数据
x = torch.randn(100, 1)
y = 30 * x

# 定义模型
model = torch.nn.Linear(1, 1)

# 定义损失函数和优化器
criterion = torch.nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# 训练模型
for epoch in range(500):
    # 前向传播
    y_pred = model(x)

    # 计算损失
    loss = criterion(y_pred, y)

    # 反向传播
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

print(model.weight)
print(model.bias)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

lrs = [0.5, 0.3, 0.1, 0.01]#前面建立模型什么的代码都一样,只有这里lr弄了多个数,用于比较
num_epochs = 10
net = linreg
loss = squared_loss

batch_size = 10

all_lrs = []#多了个定义数组
for lr in lrs:#将所有的lr都遍历一遍
    train_lrs = []
    for epoch in range(num_epochs):
        for X, y in data_iter(batch_size, features, labels):
            l = loss(net(X, w, b), y)  # X和y的小批量损失
            # 因为l形状是(batch_size,1),而不是一个标量。l中的所有元素被加到一起,
            # 并以此计算关于[w,b]的梯度
            l.sum().backward()
            sgd([w, b], lr, batch_size)  # 使用参数的梯度更新参数
        with torch.no_grad():
            train_l = loss(net(features, w, b), labels)
            train_lrs.append(float(train_l.mean()))
    all_lrs.append(train_lrs)#弄到all_lrs里
    
#开始画图
epochs = np.arange(1, num_epochs+1)
d2l.plot(epochs, all_lrs, xlabel='epoch num', ylabel='loss', 
         legend=[f'learn rate {lr}' for lr in lrs],
         figsize=(6, 4))

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 线性回归的简洁实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
类似书上:在这里插入图片描述

3.4 softmax回归

3.5 图像分类数据集

3.6 softmax回归的从零开始实现

3.7 softmax回归的简洁实现

剩下的大家可以直接看这个书https://datawhalechina.github.io/d2l-ai-solutions-manual/#/ch03/ch03?id=_34-softmax%e5%9b%9e%e5%bd%92

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值