工欲善其事必先利其器,TensorFlow和Pytorch之争愈演愈烈,其实大可不必在框架工具选择上耗费精力,我们根据自己的喜好选择就好,毕竟只是工具而已。
今天小白就来教入门的小宝贝儿们使用Pytorch来搭建我们的第一个可以用来训练的神经网络。
如果对神经网络不太了解的小伙伴可以关注我,我会出一个系列教程的(嗯嗯,先挖坑)。
首先我们要导入torch(搭建模型)、numpy(生成数据)、matplot(用于可视化)等库。
import torch
import torch.nn.functional as F
from torch import nn
from torch.autograd import Variable
import matplotlib.pyplot as plt
import numpy as np
接下来我们构建一组数据用来训练我们搭建的神经网络模型。
n_data = torch.ones(100,2)
x0= torch.normal(2*n_data,1)
y0= torch.zeros(100)
x1 = torch.normal(-2*n_data,1)
y1 = torch.ones(100)
x = torch.cat((x0,x1),0).type(torch.FloatTensor)
y = torch.cat((y0,y1),0).type(torch.LongTensor)
x,y = Variable(x),Variable(y)
plt.scatter(x.data.numpy()[:,0],x.data.numpy()[:,1],c=y.data.numpy())#,s=100,lw=0,cmap="RdYlGn")
看起来很复杂的样子,大家不要被吓到,小白来给大家解释下,这段代码的核心是2、4行,也就是normal函数,以第2行为例
x0= torch.normal(2*n_data,1)
这个函数的作用是从均值为2*n_data,标准差为1的相互独立的正态分布中取值,也就是说其实是使我们得到的数据服从正态分布,后面我们画图出来就一目了然了,大家暂时不理解也不要紧。
第11行是将生成的数据画做散点图可视化,可以看到我们生成了两块不同区域的散点图,我们的目的就是要训练一个神经网络模型,将这两个区域的点分开。
下面我们要开始搭建神经网络了,are u ready?
一个典型的神经网络要有输入层、隐藏层、输出层,接下来我们就来一行一行的代码搭建这个模型。
class Net(torch.nn.Module):#继承神经网络模块
def __init__(self,n_features,n_hidden,n_output):#初始化神经网络超参数
super(Net,self).__init__()#调用父类神经网络模块的初始化方法
self.hidden = torch.nn.Linear(n_features,n_hidden)#指定隐藏层有多少输入,多少输出
self.predict = torch.nn.Linear(n_hidden,n_output)
def forward(self,x):#build neuralnetwork
x = F.relu(self.hidden(x))#activate functional
x = self.predict(x)#get the predict result
return x
2-5行定义了模型的初始化函数,n_features对应输入层的神经元数量,n_hidden对应的是隐藏层的神经元数量,n_output对应的输出层的神经元数量。
第4行定义了从输入层到隐藏层的线性变换
self.hidden = torch.nn.Linear(n_features,n_hidden)#指定隐藏层有多少输入,多少输出
第5行定义了从隐藏层到输出层的线性变换
self.predict = torch.nn.Linear(n_hidden,n_output)
6-9行定义了前向传播函数,这个forward函数定义了网络各层之间是如何连接的,这里的激活函数我们使用了relu函数。
到这里我们的第一个神经网络模型就搭建完成了,接下来,我们要开始训练这个网络模型了,想想还有点小兴奋。
我建了一个NLP学习交流群,大家可以一起交流,大家关注“机器者说”公众号即可加入。