第乙個pytorch示例

2021-10-08 22:18:17 字數 4117 閱讀 8788

注:僅供記錄所用

pytorch實現第乙個兩層神經網路

1.普通pytorch實現

import torch

n,d_in,h,d_out = 64,1000,100,10 #64個訓練資料,輸入1000維,隱藏層100維,輸出層10維

#產生訓練資料

x = torch.randn(n,d_in)

y = torch.randn(n,d_out)

w1 = torch.randn(d_in,h,requires_grad=true) #requires_grad=true表wtensor中列出梯度

w2 = torch.randn(h,d_out,requires_grad=true)

learning_rate = 1e-6

for it in range(500):

y_pred = x.mm(w1).clamp(min=0).mm(w2) #模型

loss = (y-y_pred).pow(2).sum() #計算損失函式

print(it,loss.item()) #item()從tensor中取出數

#反向傳播

loss.backward()

#更新引數

with torch.no_grad():

w1 -= learning_rate*w1.grad

w2 -= learning_rate*w2.grad

w1.grad.zero_()

w2.grad.zero_() #每次調整引數後講w1,w2清零

2.使用torch.nn 

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_out)

#sequen模型

model = torch.nn.sequential(

torch.nn.linear(d_in,h), #w1+b 但可以設定其引數為bias=false

torch.nn.relu(),

torch.nn.linear(h,d_out)

)#model = model.cuda() 使用gpu

'''torch.nn.init.normal_(model[0].weight) #第三種初始化

第二種與第一種相比,效果確實差太多了

3.加上初始化則與第一種差不多了

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

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

4.使用adm

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_out)

model = torch.nn.sequential(

torch.nn.linear(d_in,h),

torch.nn.relu(),

torch.nn.linear(h,d_out)

)#model = model.cuda() 使用gpu

loss_fn = nn.mseloss(reduction = 'sum')

learning_rate = 1e-4 #1e-3到1e-4是adam最好的使用範圍

optimizer = torch.optim.adam(model.parameters(),lr=learning_rate)

for it in range(500):

#forward pass

y_pred = model(x) #model forward

#compute loss

loss = loss_fn(y_pred,y) #computation graph

print(it,loss.item())

optimizer.zero_grad()

#backward pass

loss.backward()

#update mode parameters

optimizer.step() #optimizer一步把所有引數更新

5.講**模組化

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_out)

class twolayernet(torch.nn.module):

def __init__(self, d_in, h, d_put):

super(twolayernet,self).__init__()

#define the model architecture

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 = nn.mseloss(reduction = 'sum')

learning_rate = 1e-4 #1e-3到1e-4是adam最好的使用範圍

optimizer = torch.optim.adam(model.parameters(),lr=learning_rate)

for it in range(500):

#forward pass

y_pred = model(x) #model forward

#compute loss

loss = loss_fn(y_pred,y) #computation graph

print(it,loss.item())

optimizer.zero_grad()

#backward pass

loss.backward()

#update mode parameters

optimizer.step() #optimizer一步把所有引數更新

老師真的講的太好了,給跪了。。。。

React Native 第乙個示例

使用下面的命令 npm install g react native cli react native init awesomeproject 生成乙個名為awesomeproject的專案,輸入 cd awesomeproject react native run android 可以讓專案工程執...

python第乙個程式設計 第乙個 Python 程式

簡述 安裝完 python 後,windows 中 開始選單或安裝目錄下就會有 idle 開發 python 程式的基本 ide 整合開發環境 幫助手冊 模組文件等。linux 中 只需要在命令列中輸入 python 命令即可啟動互動式程式設計。互動式程式設計 互動式程式設計不需要建立指令碼檔案,是...

第乙個部落格

我不知道為什麼 我在csdn上創了乙個賬號,又開通了部落格。也許我不是名人,也許幻想著成為名人。在這裡 我不會給任何人許諾,這個部落格可能有乙個博文 有兩個博文 或者會有很多 很多 很多。不過讓我有個大膽的猜想,如果這個部落格在今後有很多很多自己寫的博文,說明我成功了 在自己眼裡 也說明這個方法時正...