码迷,mamicode.com
首页 > 其他好文 > 详细

PyTorch_0

时间:2019-08-10 14:23:00      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:学习   port   标准   clone   backward   示例   out   sel   输入数据   

 1 import torch
 2 from torch.autograd import Variable
 3 batch_n      = 100        #一个批次中输入数据的数量
 4 hidden_layer = 100        
 5 input_data   = 1000        #每个数据包含特征数量
 6 output_data  = 10        
 7 
 8 class Model(torch.nn.Module):
 9 
10     def __init__(self):
11         super(Model,self).__init__()
12 
13     def forward(self,input,w1,w2):
14         x = torch.mm(input,w1)
15         x = torch.clamp(x, min=0)
16         x = torch.mm(x,w2)
17         return x
18 
19     def backward(self):
20         pass
21 
22 
23 # x = torch.randn(batch_n, input_data)                #示例输入(方法一)
24 # y = torch.randn(batch_n, output_data)                #标准输出
25 x = Variable(torch.randn(batch_n,input_data),requires_grad = False)        #方法二、三
26 y = Variable(torch.randn(batch_n,output_data),requires_grad = False)
27 
28 # w1 = torch.randn(input_data, hidden_layer)        #权重(方法一)
29 # w2 = torch.randn(hidden_layer, output_data)
30 w1 = Variable(torch.randn(input_data,hidden_layer),requires_grad = True)    #方法二、三
31 w2 = Variable(torch.randn(hidden_layer,output_data),requires_grad= True)
32 
33 epoch_n = 30                #步数
34 learning_rate = 1e-6        #学习率
35 
36 model = Model()
37 
38 for epoch in range(epoch_n):
39     # y_pred= x.mm(w1).clamp(min=0).mm(w2)
40     y_pred = model(x,w1,w2)
41     loss = (y_pred - y).pow(2).sum()                        #损失函数
42     # print("Epoch:{ }, Loss:{:.4f}",format(epoch,loss))
43     print("Epoch:",epoch, " Loss:",loss.item())
44 
45     # 反向传播 方法一:手动计算梯度,更新权值
46     # grad_y_pred = 2*(y_pred - y)
47     # grad_w2 = h1.t().mm(grad_y_pred)
48     #
49     # grad_h = grad_y_pred.clone()
50     # grad_h = grad_h.mm(w2.t())
51     # grad_h.clamp_(min=0)
52     # grad_w1 = x.t().mm(grad_h)
53     #
54     # w1 -= learning_rate*grad_w1
55     # w2 -= learning_rate*grad_w2
56 
57     # 反向传播 方法二:自动梯度
58     loss.backward()
59 
60     w1.data -= learning_rate*w1.grad
61     w2.data -= learning_rate*w2.grad
62 
63     w1.grad.data.zero_()
64     w2.grad.data.zero_()

 

PyTorch_0

标签:学习   port   标准   clone   backward   示例   out   sel   输入数据   

原文地址:https://www.cnblogs.com/RaspberryFarmer/p/10348742.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!