跟小白一起學NLP(一)實戰!Pytorch構建神經網絡

跟小白一起學NLP(一)實戰!Pytorch構建神經網絡

作者系北京航空航天大學人工智能方向碩士,專注於NLP方向,歡迎大家多多交流。


工欲善其事必先利其器,TensorFlow和Pytorch之爭愈演愈烈,其實大可不必在框架工具選擇上耗費精力,我們根據自己的喜好選擇就好,畢竟只是工具而已。


今天小白就來教入門的小寶貝兒們使用Pytorch來搭建我們的第一個可以用來訓練的神經網絡。

如果對神經網絡不太瞭解的小夥伴可以關注我,我會出一個系列教程的(嗯嗯,先挖坑)。

跟小白一起學NLP(一)實戰!Pytorch構建神經網絡

首先我們要導入torch(搭建模型)、numpy(生成數據)、matplot(用於可視化)等庫。

<code>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/<code>

接下來我們構建一組數據用來訓練我們搭建的神經網絡模型。

<code>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")
/<code>

看起來很複雜的樣子,大家不要被嚇到,小白來給大家解釋下,這段代碼的核心是2、4行,也就是normal函數,以第2行為例

<code>        x0= torch.normal(2*n_data,1)/<code>

這個函數的作用是從均值為2*n_data,標準差為1的相互獨立的正態分佈中取值,也就是說其實是使我們得到的數據服從正態分佈,後面我們畫圖出來就一目瞭然了,大家暫時不理解也不要緊。

第11行是將生成的數據畫做散點圖可視化,可以看到我們生成了兩塊不同區域的散點圖,我們的目的就是要訓練一個神經網絡模型,將這兩個區域的點分開。


跟小白一起學NLP(一)實戰!Pytorch構建神經網絡

下面我們要開始搭建神經網絡了,are u ready?

一個典型的神經網絡要有輸入層、隱藏層、輸出層,接下來我們就來一行一行的代碼搭建這個模型。

跟小白一起學NLP(一)實戰!Pytorch構建神經網絡


2-5行定義了模型的初始化函數,n_features對應輸入層的神經元數量,n_hidden對應的是隱藏層的神經元數量,n_output對應的輸出層的神經元數量。

第4行定義了從輸入層到隱藏層的線性變換

<code>self.hidden = torch.nn.Linear(n_features,n_hidden)#指定隱藏層有多少輸入,多少輸出/<code> 

第5行定義了從隱藏層到輸出層的線性變換


<code>self.predict = torch.nn.Linear(n_hidden,n_output)/<code>

6-9行定義了前向傳播函數,這個forward函數定義了網絡各層之間是如何連接的,這裡的激活函數我們使用了relu函數。


到這裡我們的第一個神經網絡模型就搭建完成了,接下來,我們要開始訓練這個網絡模型了,想想還有點小興奮。(未完待續)

我建了一個群,大家可以一起討論,關注後私信我,學習路上不孤單。


分享到:


相關文章: