动手学深度学习Pytorch 4.4练习

1.这个多项式回归问题可以准确地解出吗?提⽰:使⽤线性代数。
可以,把多项式问题,用matlab的str2sym表示出来,再用solve求解。

2.考虑多项式的模型选择。

  • 1. 绘制训练损失与模型复杂度(多项式的阶数)的关系图。观察到了什么?需要多少阶的多项式才能将训练损失减少到0?
    画图代码(阶数1-100):
# 记得把max_degree改为100

# 把train改成这个函数
def trainLossComplex(train_features,test_features,train_labels,test_labels,
          num_epochs=1000):
    loss=nn.MSELoss(reduction='none')
    input_shape=train_features.shape[-1]
    # 不设置偏置,因为我们已经在多项式中实现了它
    net = nn.Sequential(nn.Linear(input_shape,1,bias=False))
    batch_size=min(10,train_labels.shape[0])
    train_features=torch.tensor(train_features, dtype=torch.float32)
    test_features=torch.tensor(test_features, dtype=torch.float32)
    train_iter=d2l.load_array((train_features,train_labels.reshape(-1,1)),
                            batch_size)
    test_iter=d2l.load_array((test_features,test_labels.reshape(-1,1)),batch_size,
                            is_train=False)
    trainer=torch.optim.SGD(net.parameters(),lr=0.01)
    for epoch in range(num_epochs):
        d2l.train_epoch_ch3(net,train_iter,loss,trainer)
    return evaluate_loss(net,train_iter,loss),evaluate_loss(net,test_iter,loss)
trainLoss=[]
textLoss=[]
x=np.arange(1,100)
for i in np.arange(1,100):
    train_loss,text_loss=trainLossComplex(poly_features[:n_train, :i], poly_features[n_train:,:i],
        labels[:n_train],labels[n_train:])
    trainLoss.append(train_loss)
    textLoss.append(text_loss)
d2l.plot(x, y, xlabel='degree', ylabel='train_loss', legend=None, xlim=None,
         ylim=[1e-3+0.007,1*1e-2+0.005], xscale='linear', yscale='linear',
         fmts=('-', 'm--', 'g-.', 'r:'), figsize=(3.5, 2.5), axes=None)

在这里插入图片描述
从图中看,1-100的阶数的多项式都不能把训练损失减少到0

  • 2. 在这种情况下绘制测试的损失图。
d2l.plot(x, textLoss, xlabel='degree', ylabel='train_loss', legend=None, xlim=None,
         ylim=[1e-3,1.2], xscale='linear', yscale='linear',
         fmts=('-', 'm--', 'g-.', 'r:'), figsize=(3.5, 2.5), axes=None)

在这里插入图片描述
这里的值没有到0,只是图上看着到了

  • 3. ⽣成同样的图,作为数据量的函数。
    改一改数据量吧,再自己画一下吧,我太懒了,对不起

3. 如果不对多项式特征xi进⾏标准化(1/i!),会发⽣什么事情?能⽤其他⽅法解决这个问题吗?
如果有一个 x大于 1,那么这个很大的 i就会带来很大的值,优化的时候可能会带来很大的梯度值。

4. 泛化误差可能为零吗?
不太可能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值