Pytorch入門操作 構建簡單的神經網路

2021-10-09 13:00:34 字數 3321 閱讀 7170

讀研伊始,簡單了解了一下pytorch構建神經網路的方法,特記錄。

1、利用pytorch實現神經網路時,要注意:

numpy和tensor的互化

資料型別的轉化,包括numpy的int32、float64等,注意numpy中astype()的用法。

注意conv接收的資料為4維:batch, channel, h, w,維度的增加和減少要記住squeeze()unsqueeze()的用法,改變tensor尺寸要熟悉view()的用法。

想要手動定義卷積核,可以使用torch.nn.functional中的conv2d(),它和torch.nn中的conv2d不太一樣,注意區別功能和函式名的大小寫。

2、網路的搭建

網路的搭建大多是定義類,可以選擇將優化器、loss寫在類內,也可以在後續訓練模型時單獨寫優化器和loss。

例1:構建乙個簡單的全連線網路,就是最熟悉的輸入層——隱含層——輸出層。

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.hidden2 = torch.nn.linear(n_hidden, n_hidden)

self.out = torch.nn.linear(n_hidden, n_output)

defforward

(self,x)

: x = f.relu(self.hidden(x)

)#x = f.relu(self.hidden2(x))

x = self.out(x)

return x

#輸出網路結構

net_test=net(4,

7,3)

print

(net_test)

輸出:

net(

(hidden): linear(in_features=4, out_features=7, bias=true)

(out): linear(in_features=7, out_features=3, bias=true)

)

這時如果使用梯度下降,那麼:

net = net(n_feature=

4, n_hidden=

20, n_output=3)

#定義網路

optimizer = torch.optim.sgd(net.parameters(

), lr=

0.01

)# sgd:隨機梯度下降法

for i in

range

(iters)

: out = net(train_data)

#獲取輸出

criteria=nn.crossentropyloss(

) loss = criteria(out,y)

# 1、定義loss,輸出與原始標籤對比

optimizer.zero_grad(

)# 2、初始化梯度

loss.backward(

)# 3、反向傳播

optimizer.step(

)# 4、更新引數

'''注意!!對於crossentropyloss(),有時不能直接用

crossentropyloss(predict,y)

樓主還是初學,暫時不知道原因,但是mseloss()可以直接把引數放進去

懇求大家指導

'''

例2:搭建網路的同時定義優化器和loss。

# **參考其它部落格

# class

mynet

(nn.module)

:def

__init__

(self)

:super

(mynet, self)

.__init__(

)# 容器,使用時順序呼叫各個層

self.fc = nn.sequential(

# 定義三層

nn.linear(2,

4), nn.linear(4,

4), nn.linear(4,

1),)

# 優化器

# params:優化物件

# lr:學習率

self.opt = torch.optim.adam(params=self.parameters(

), lr=

0.001

) self.mls = torch.nn.mseloss(

)#定義損失函式

defforward

(self, inputs)

:return self.fc(inputs)

deftrain

(self, x, y)

:# 訓練

out = self.forward(x)

# 得到輸出結果

loss = self.mls(out, y)

#1、計算loss

self.opt.zero_grad(

)#2、初始化梯度

loss.backward(

)#3、反向傳播

self.opt.step(

)#4、梯度更新

deftest

(self, x)

:# 測試,就是前向傳播的過程

return self.forward(x)

這時如果想要訓練模型,那麼:

if __name__==

'__main__':

net = mynet(

)for i in

range

(iters)

: net.train(x, y)

out = net.test(待測值)

3、其他

我會把學習過程中的notebook放在github上:cca8290的github

pytorch入門1 1(基本操作)

本節繼續來講pytorch的入門級操作,加加減減 拍平拉直的操作。在操作張量的的時候,肯定少不了張量之間的加減乘除。二維世界的張量就是矩陣,是不是像我們學數學那樣直接用 直接操作就好了呢?x torch.tensor 1,2 3,4 y torch.ones 2,2 x y 對應元素相加 x y 對...

pytorch入門1 0(基本操作)

pytorch入門1.0 主要是關於張量的建立 運算 索引等一些基本操作。隨便練習一下,增加對張量操作的熟悉程度。1.pytorch是什麼?pytorch是2017年由facebook人工智慧研究院 fair 基於torch推出的乙個開源python機器學習庫。該庫能借助gpu加速張量的計算 亦具有...

利用pytorch構建簡單神經網路

省略了資料集的處理過程 轉為tensor x torch.tensor input features,dtype float y torch.tensor labels,dtype float 權重引數初始化,設計網路結構 輸入348 14 weights torch.randn 14 128 dt...