PyTorch笔记2-关系拟合(回归)
来源:互联网 发布:网络教育学历国家承认 编辑:程序博客网 时间:2024/06/03 20:11
本系列笔记为莫烦PyTorch视频教程笔记 github源码
import torchfrom torch.autograd import Variableimport torch.nn.functional as F # activation functionimport matplotlib.pyplot as plt% matplotlib inline
建立数据集
我们创建一些假数据来模拟真实的情况. 比如一个一元二次函数: y = a * x^2 + b, 我们给 y 数据加上一点噪声来更加真实的展示它.
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) # x data(tensor), shape(100,1)y = x.pow(2) + 0.2*torch.rand(x.size()) # rand [0,1) 为添加噪声# 用 Variable 来修饰这些数据 tensorx, y = Variable(x), Variable(y)# 画图plt.scatter(x.data.numpy(), y.data.numpy()) # 散点图plt.show()
建立神经网络
建立一个神经网络可以直接运用 torch 中的体系。先定义所有的层属性(init()),然后一层层搭建(forward(x))层与层的关系连接(前向传播)
- 注1:torch.nn.Linear.init 分别定义parameters(W b)和初始化了parameters(W b),这里采用 torch 默认的 parameters 设置就好 参见
- 注2:该模型拟合二次函数,为回归模型,输出层不需要激励函数
class Net(torch.nn.Module): def __init__(self, n_feature, n_hidden, n_output): super(Net, self).__init__() # 定义每层的形式, 带一个隐藏层 self.hidden = torch.nn.Linear(n_feature, n_hidden) # 隐藏层 self.predict = torch.nn.Linear(n_hidden, n_output) # 输出层 def forward(self, x): a1 = F.relu(self.hidden(x)) # 隐藏层用 relu y = self.predict(a1) return ynet = Net(n_feature=1, n_hidden=10, n_output=1)print(net)
Net ( (hidden): Linear (1 -> 10) (predict): Linear (10 -> 1))
训练网络
训练的步骤很简单,如下:
# optimizer 是训练的工具loss_func = torch.nn.MSELoss() # 用均方差计算 cost functionoptimizer = torch.optim.SGD(net.parameters(), lr=0.5) # 随机梯度下降,学习率为0.5for t in range(100): prediction = net(x) loss = loss_func(prediction, y) optimizer.zero_grad() # clear gradients for next train loss.backward() # 反向传播 optimizer.step() # 更新参数(w、b)
可视化训练过程
为了可视化整个训练的过程, 更好的理解是如何训练, 每迭代10次就出图并查看 loss
# optimizer 是训练的工具loss_func = torch.nn.MSELoss() # 用均方差计算 cost functionoptimizer = torch.optim.SGD(net.parameters(), lr=0.5) # 随机梯度下降,学习率为0.5for t in range(100): prediction = net(x) loss = loss_func(prediction, y) optimizer.zero_grad() # clear gradients for next train loss.backward() # 反向传播 optimizer.step() # 更新参数(w、b) # 没迭代10次,输出 loss if t % 10 == 0: plt.subplot(5,2,int(t/10+1)) plt.scatter(x.data.numpy(), y.data.numpy()) plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5) plt.text(-0.5, 0.6, 'L=%.8f' % (loss.data[0]), fontdict={'size': 10, 'color': 'red'})
Learning rate decay
随时间慢慢衰减学习率 learning rate 可以加快学习,同时让 cost 在更小范围内波动,参考
function adjust_learning_rate 定义了学习率衰减,每经过一次 lr_decay_epoch,learning rate 就会衰减为原来的 decay_rate
optimizer 是通过 param_group 来管理参数的,其保存了 learning rate, momentum等,demo
def adjust_learning_rate(optimizer, epoch, decay_rate=.9, lr_decay_epoch=10): """learning rate 衰减为原来的 decay_rate by lr_decay_epoch""" if epoch % lr_decay_epoch: return optimizer for param_group in optimizer.param_groups: param_group['lr'] = param_group['lr'] * decay_rate# optimizer 是训练的工具loss_func = torch.nn.MSELoss() # 用均方差计算 cost functionoptimizer = torch.optim.SGD(net.parameters(), lr=0.5) # 随机梯度下降,学习率为0.5for t in range(100): prediction = net(x) loss = loss_func(prediction, y) adjust_learning_rate(optimizer, t) optimizer.zero_grad() # clear gradients for next train loss.backward() # 反向传播 optimizer.step() # 更新参数(w、b) # 没迭代10次,输出 loss if t % 10 == 0: plt.subplot(5,2,int(t/10+1)) plt.scatter(x.data.numpy(), y.data.numpy()) plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5) plt.text(-0.5, 0.6, 'L=%.8f' % (loss.data[0]), fontdict={'size': 10, 'color': 'red'})
阅读全文
0 0
- PyTorch笔记2-关系拟合(回归)
- pytorch 模拟关系拟合——回归
- 回归算法(最小二乘法拟合)
- Pytorch学习笔记(三)线性回归与逻辑回归
- pytorch Dropout过拟合
- pytorch学习笔记(1)--pytorch张量
- 用 sklearn 线性回归 拟合房价与房屋尺寸关系
- 莫烦PyTorch学习笔记(二)——回归
- 回归算法学习笔记(一)用线性回归线找到最佳拟合直线
- 回归系数(拟合度)与相关系数
- Matlab教程三:回归分析(拟合)
- Pytorch学习笔记(一)
- Pytorch学习笔记(二)
- Pytorch学习笔记(三)
- Pytorch学习笔记(四)
- Pytorch学习笔记(五)
- Pytorch学习笔记(六)
- 局部加权回归、欠拟合、过拟合 - Andrew Ng机器学习公开课笔记1.3
- c# 窗体放大窗体中的控件也随着窗体放大
- Python数据挖掘建模 chapter_2决策树
- Hdfs java API 使用注意
- javascript之类型
- hadoop shell 常用命令
- PyTorch笔记2-关系拟合(回归)
- 整理了Linux常用命令及快捷键
- Spark性能调优
- 起航篇
- 分数矩阵
- codeforces 887 C. Solution for Cube(Codeforces Round #444 (Div. 2))
- Python-Celery的使用
- springmvc @RequestParam 获取参数 HTTP Status 400
- React : 展示组件 & 容器组件 附案例与视频