# 1.多项式函数拟合实验

`%matplotlib inlineimport sysimport torchimport torchvisionimport numpy as npimport matplotlib.pyplot as pltimport torchvision.transforms as transformsfrom torch import nnfrom time import timefrom numpy import argmaxfrom torch.nn import initfrom IPython import display`

## 1.1 生成数据集

`poly_features = torch.cat((features,torch.pow(features,2),torch.pow(features,3)),1)#将x，x的平方和x的立方合为一个张量，经过了这一步之后，这个多项式就变成了输入特征为3，输出为1的全连接层。`

`ntrain,ntest,true_w,true_b = 100,100,[1.2,-3.4,5.6],5#定义训练集、测试集样本数和权重、偏差参数features = torch.randn((ntrain+ntest,1))#生成随机特征值poly_features = torch.cat((features,torch.pow(features,2),torch.pow(features,3)),1)#将x，x的平方和x的立方合为一个张量，经过了这一步之后，这个多项式就变成了输入特征为3，输出为1的全连接层。labels = true_w[0]*poly_features[:,0]+true_w[1]*poly_features[:,1]+true_w[2]*poly_features[:,2]+true_b#根据特征值计算标签labels = labels+torch.tensor(np.random.normal(0,0.01,size = labels.size()),dtype = torch.float)#为标签添加随机噪声项`

## 1.2 读取数据

`batch_size =10dataset = torch.utils.data.TensorDataset(poly_features,labels)train_iter = torch.utils.data.DataLoader(dataset,batch_size,shuffle = True)`

## 1.3 损失函数和优化算法

`loss = torch.nn.MSELoss()#损失函数optimizer = torch.optim.SGD(net.parameters(),lr = 0.01)#优化算法`

## 1.4 训练模型

`def train(num_epochs,train_features,test_features,train_labels,test_labels):    #四个参数：训练特征值集、测试特征值集、训练标签集和测试标签集。    net = torch.nn.Linear(train_features.shape[-1], 1)    #定义神经网络的输入、输出，设置为全连接神经网络。    batch_size = min(10, train_labels.shape[0])        dataset = torch.utils.data.TensorDataset(train_features, train_labels)    train_iter = torch.utils.data.DataLoader(dataset, batch_size, shuffle=True)    #读取数据    optimizer = torch.optim.SGD(net.parameters(), lr)    for epoch in range(num_epochs+1):        for X,y in train_iter:	#从迭代器中读取出特征值、标签            l = loss(net(X),y.view(-1,1))	#损失值换形            optimizer.zero_grad()            l.backward()            optimizer.step()        train_labels = train_labels.view(-1, 1)        test_labels = test_labels.view(-1, 1)        train_ls.append(loss(net(train_features), train_labels).item())        test_ls.append(loss(net(test_features), test_labels).item())        #记录每一个学习周期的损失值，生成列表。`

## 1.5 图像可视化

```#可视化def draw(train_ls,test_ls):    x = range(1, num_epochs + 2)    x = np.array(x)    train_ls = np.array(train_ls)    train_ls = np.log(train_ls)    test_ls = np.array(test_ls)    test_ls = np.log(test_ls)
l1 = plt.plot(x, train_ls,label = 'train')    l2 = plt.plot(x,test_ls,'--',label = 'test')
plt.title('Underfit')    plt.xlabel('epochs')    plt.ylabel('Loss')    plt.legend(loc='upper right')```

### 1.5.1 三阶多项式函数拟合正常

`#正常train(num_epochs,poly_features[:n_train, :], poly_features[n_train:, :], labels[:n_train], labels[n_train:])`

### 1.5.2 三阶多项式函数过拟合

`#过拟合train(num_epochs,poly_features[0:2, :], poly_features[n_train:, :], labels[0:2],labels[n_train:])`

### 1.5.3 三阶多项式函数欠拟合

`#欠拟合train(num_epochs,features[:n_train, :], features[n_train:, :], labels[:n_train],labels[n_train:])`

0 条评论

• ### 从0到1，实现你的第一个多层神经网络

多层感知机在单层神经网络的基础上引入了一到多个隐藏层(hidden layer)。如图所示的隐藏层一共有5个隐藏单元。由于输入层不涉及计算，因此这个多层感知机的...

• ### 【动手学深度学习笔记】之实现softmax回归模型

设置小批量数目为256。这一部分与之前的线性回归的读取数据大同小异，都是转换类型-->生成迭代器。

• ### 【动手学深度学习笔记】之多层感知机实现

Fashion-MNIST数据集中的图像为28*28像素，也就是由784个特征值。Fashion-MNIST数据集一共有十个类别。因此模型需要784个输入，10...

• ### 迁移学习 Transfer Learning

在上次的动画简介中, 我们大概了解了一些迁移学习的原理和为什么要使用迁移学习. 如果用一句话来概括迁移学习, 那务必就是:“为了偷懒, 在训练好了的模型上接着训...

• ### K-近邻算法（KNN）实战

存在一个样本数据集合，也称作训练样本集，并且样本集中每个数据都存在标签，即我们知道样本集中每一数据 与所属分类的对应关系。输人没有标签的新数据后，将新数据的每个...

• ### 简易数据分析（三）：Web Scraper 批量抓取豆瓣数据与导入已有爬虫

上篇文章我们爬取了豆瓣电影 TOP250 前 25 个电影的数据，今天我们就要在原来的 Web Scraper 配置上做一些小改动，让爬虫把 250 条电影数据...

• ### 神经网络的基础是MP模型？南大周志华组提出新型神经元模型FT

在此论文中，来自南京大学的张绍群博士和周志华教授提出一个新型神经元模型 Flexible Transmitter (FT)，该模型具备灵活的可塑性并支持复杂数据...

• ### AutoML之自动化特征工程

个人以为，机器学习是朝着更高的易用性、更低的技术门槛、更敏捷的开发成本的方向去发展，且AutoML或者AutoDL的发展无疑是最好的证明。因此花费一些时间学习了...

• ### 为什么我们的神经网络需要激活函数

如果你正在读这篇文章，那么很可能你已经知道什么是神经网络，什么是激活函数，但是，一些关于机器学习的入门课程并不能很清楚地说明，为什么我们需要这些激活函数。我们需...