注:僅供記錄所用
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上創了乙個賬號,又開通了部落格。也許我不是名人,也許幻想著成為名人。在這裡 我不會給任何人許諾,這個部落格可能有乙個博文 有兩個博文 或者會有很多 很多 很多。不過讓我有個大膽的猜想,如果這個部落格在今後有很多很多自己寫的博文,說明我成功了 在自己眼裡 也說明這個方法時正...