PyTorch快速入门教程二(线性回归以及logistic回归)
2017-07-02 00:00
936 查看
摘要: 上一篇教程中介绍了pytorch里面的操作单元Tensor,以及计算图中的操作单位Variable,相信大家都已经熟悉了;下面这一部分我们就从两个最基本的机器学习,线性回归以及logistic回归来开始建立我们的计算图进行运算。
上图就简单地描绘出了线性回归的基本原理,接下来我们来重点讲讲如何用pytorch写一个简单的线性回归。
显示出来就如下图所示
上一讲我们已经学习如何将numpy转换成Tensor,使用
这样我们就把数据转换成了Tensor。
这里的
然后需要定义
这里使用的是最小二乘
第一个循环表示每个epoch,接着开始前向传播,然后计算loss,然后反向传播,接着优化参数,特别注意的是在每次反向传播的时候需要将参数的梯度归零,即
特别注意的是需要用
最后可以得到这个结果
以及loss的结果
在这里,我整理发布了Pytorch中文文档,方便大家查询使用,同时也准备了中文论坛,欢迎大家学习交流!
Pytorch中文文档
Pytorch中文论坛
Pytorch中文文档已经发布,完美翻译,更加方便大家浏览:
Pytorch中文网:https://ptorch.com/
Pytorch中文文档:https://ptorch.com/docs/1/
线性回归
对于线性回归,相信大家都很熟悉了,各种机器学习的书第一个要讲的内容必定有线性回归,这里简单的回顾一下什么是简单的一元线性回归。即给出一系列的点,找一条直线,使得这条直线与这些点的距离之和最小。上图就简单地描绘出了线性回归的基本原理,接下来我们来重点讲讲如何用pytorch写一个简单的线性回归。
Data参数
首先我们需要给出一系列的点作为线性回归的数据,使用numpy来存储这些点。如果没有安装Numpy,可以参考这篇文章:Python如何使用PIP安装numpyx_train = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168], [9.779], [6.182], [7.59], [2.167], [7.042], [10.791], [5.313], [7.997], [3.1]], dtype=np.float32) y_train = np.array([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573], [3.366], [2.596], [2.53], [1.221], [2.827], [3.465], [1.65], [2.904], [1.3]], dtype=np.float32)
显示出来就如下图所示
上一讲我们已经学习如何将numpy转换成Tensor,使用
torch.from_numpy()和
numpy函数即可进行相互转换
x_train = torch.from_numpy(x_train) y_train = torch.from_numpy(y_train)
这样我们就把数据转换成了Tensor。
Model
上一节讲了基本的线性回归以及模型框架,按照这个框架就可以写出一个线性回归模型了# -*- coding: utf-8 -*- import numpy as np import torch import torch.nn as nn import torch.nn.functional as F class LinearRegression(nn.Module): def __init__(self): super(LinearRegression, self).__init__() self.linear = nn.Linear(1, 1) # input and output is 1 dimension def forward(self, x): out = self.linear(x) return out model = LinearRegression()
这里的
nn.Linear表示的是
y=w*x+b,里面的两个参数都是1,表示的是x是1维,y也是1维。当然这里是可以根据你想要的输入输出维度来更改的,之前使用的别的框架的同学应该很熟悉。
然后需要定义
loss和
optimizer,就是误差和优化函数
criterion = nn.MSELoss() optimizer = optim.SGD(model.parameters(), lr=1e-4)
这里使用的是最小二乘
loss,之后我们做分类问题更多的使用的是
cross
entropy
loss,交叉熵。优化函数使用的是随机梯度下降,注意需要将model的参数
model.parameters()传进去让这个函数知道他要优化的参数是哪些。
开始训练
我们接着开始训练num_epochs = 1000 for epoch in range(num_epochs): inputs = Variable(x_train) target = Variable(y_train) # forward out = model(inputs) # 前向传播 loss = criterion(out, target) # 计算loss # backward optimizer.zero_grad() # 梯度归零 loss.backward() # 方向传播 optimizer.step() # 更新参数 if (epoch+1) % 20 == 0: print('Epoch[{}/{}], loss: {:.6f}'.format(epoch+1,num_epochs,loss.data[0]))
第一个循环表示每个epoch,接着开始前向传播,然后计算loss,然后反向传播,接着优化参数,特别注意的是在每次反向传播的时候需要将参数的梯度归零,即
optimzier.zero_grad()
validation
训练完成之后我们就可以开始测试模型了model.eval() predict = model(Variable(x_train)) predict = predict.data.numpy()
特别注意的是需要用
model.eval(),让model变成测试模式,这主要是对
dropout和
batch normalization的操作在训练和测试的时候是不一样的
最后可以得到这个结果
以及loss的结果
在这里,我整理发布了Pytorch中文文档,方便大家查询使用,同时也准备了中文论坛,欢迎大家学习交流!
Pytorch中文文档
Pytorch中文论坛
Pytorch中文文档已经发布,完美翻译,更加方便大家浏览:
Pytorch中文网:https://ptorch.com/
Pytorch中文文档:https://ptorch.com/docs/1/
相关文章推荐
- PyTorch快速入门教程八(使用word embedding做自然语言处理的词语预测)
- PyTorch快速入门教程三(神经网络)
- PyTorch快速入门教程七(pytorch下RNN如何做自然语言处理)
- PyTorch快速入门教程五(rnn)
- PyTorch快速入门教程五(rnn)
- PyTorch快速入门教程四(cnn:卷积神经网络 )
- PyTorch快速入门教程九(使用LSTM来做判别每个词的词性)
- PyTorch快速入门教程九(使用LSTM来做判别每个词的词性)
- PyTorch快速入门教程四(cnn:卷积神经网络 )
- PyTorch快速入门教程一(环境配置)
- PyTorch快速入门教程六(使用LSTM做图片分类)
- PyTorch 深度学习:60分钟快速入门
- pytorch入门教程(一):Tensor###tensor好好好####
- Pytorch入门——安装快速安装方法
- PyTorch 深度学习:60分钟快速入门
- Pytorch快速入门一-Tensor
- PyTorch 深度学习:60分钟快速入门
- pytorch快速安装与入门
- PyTorch快速入门教程十(GANs以及对抗网络)
- git常用操作以及快速入门教程