這一次我們不用手動更新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...