Pytorch兩層神經網路

2021-09-29 05:30:49 字數 2537 閱讀 1289

這一次我們不用手動更新model的weights,而是使用optim這個包來幫助我們更新引數。optim這個package提供了各種不同的model優化方法,包括sgd+momentum,rmsprop,adam

import torch

n, d_in, h, d_out =64,

1000

,100,10

# 隨機建立一些資料, n是訓練數

x = torch.randn(n, d_in)

y = torch.randn(n, d_out)

model = torch.nn.sequential(

torch.nn.linear(d_in, h, bias=

false),

# w_1 *x +b_1

torch.nn.relu(),

torch.nn.linear(h, d_out, bias=

false),

)# # 發現model結果不太好,嘗試修改初始化

# torch.nn.init.normal_(model[0].weight)

# torch.nn.init.normal_(model[2].weight)

loss_fn = torch.nn.mseloss(reduction=

'sum'

)learning_rate =1e-

4optimizer = torch.optim.adam(model.parameters(

), lr=learning_rate)

for it in

range

(500):

# forward pass

y_pred = model(x)

# compute loss

loss = loss_fn(y_pred, y)

# computational graph

print

(it, loss.item())

optimizer.zero_grad(

)# backward pass

# compute the gradient

loss.backward(

)# update weights of w1, w2

optimizer.step(

)

我們可以定義乙個模型,繼承nn.module類。如果需要定義乙個比sequential更複雜的模型,就需要定義nn.module。

import torch

n, d_in, h, d_out =64,

1000

,100,10

# 隨機建立一些資料, n是訓練數

x = torch.randn(n, d_in)

y = torch.randn(n, d_out)

class

twolayernet

(torch.nn.module)

:def

__init__

(self, d_in, h, d_out)

:# define the model architecture

super

(twolayernet, self)

.__init__(

) self.linear1 = torch.nn.linear(d_in, h, bias=

false

) self.linear2 = torch.nn.linear(h, d_out, bias=

false

)def

forward

(self, x)

: y_pred = self.linear2(self.linear1(x)

.clamp(

min=0)

)return y_pred

model = twolayernet(d_in, h, d_out)

loss_fn = torch.nn.mseloss(reduction=

'sum'

)learning_rate =1e-

4optimizer = torch.optim.adam(model.parameters(

), lr=learning_rate)

for it in

range

(500):

# forward pass

y_pred = model(x)

# compute loss

loss = loss_fn(y_pred, y)

# computational graph

print

(it, loss.item())

optimizer.zero_grad(

)# backward pass

# compute the gradient

loss.backward(

)# update weights of w1, w2

optimizer.step(

)

PyTorch搭建兩層網路

舉乙個很簡單的例子來熟悉使用pytorch構建和訓練神經網路的整個過程。import torch import torch.nn as nn n,d in,h,d out 64,1000 100,10 隨機建立一些訓練資料 x torch.randn n,d in y torch.randn n,d...

Numpy實現兩層的神經網路

numpy ndarray是乙個普通的n維array。它不知道任何關於深度學習或者梯度 gradient 的知識,也不知道計算圖 computation graph 只是一種用來計算數 算的資料結構。一 神經網路結構圖 二 神經網路的構建 1 乙個輸入向量,乙個隱藏層,乙個全連線relu神經網路,沒...

使用python實現兩層神經網路(HW3)

記錄一下手動實現乙個兩層的全連線神經網路,主要針對於李巨集毅老師hw3的7分類問題。本來是想拿nn svg畫一下這個結構,結果維度太高,它宕機了。好吧,是我太菜了,不太會用 所以用乙個小的結構代替一下,就是乙個簡單的fcnn bp演算法就不寫在這裡了,其他的大神都講的很不錯的。網路大概結構 源 im...