使用Pytorch的torch.nn搭建网络模型

torch.nn实现了很多与神经网络相关的类,使用这个可以很方便的搭建起模型。

import torch
from torch.autograd import Variable
batch_n = 100
hidden_layer = 100
input_data = 1000
output_data = 10
x = Variable(torch.randn(batch_n, input_data), requires_grad = False)
y = Variable(torch.randn(batch_n, output_data), requires_grad = False)

这样便定义了变量和输入输出变量,此处权重被省略了。
接下来开始搭建网络模型,有了这个手写前向后向就不需要了(tql)。torch.nn.Sequential是一类容器,通过在容器中嵌套各种实现神经网络相关的类,来完成对神经网络的搭建,并且参数会根据我们的搭建自动传递下去:

models = torch.nn.Sequential(OrderedDict(
    [
        ('Line1',torch.nn.Linear(input_data, hidden_layer)),
        ('Relul',torch.nn.ReLU()),
        ('Line2',torch.nn.Linear(hidden_layer, output_data))
    ]
))

我在此处加入了序列字典,这样如果单独打印模型内容的话,可以方便找到当前的网络层,使用字典需要引入头函数:

from collections import OrderedDict

在这个网络中,使用了torch.nn.MSELoss(均方差函数)对误差进行计算,定义类时不需要引入任何参数,但是在使用的时候则需要:

loos_f = torch.nn.MSELoss()

在循环中会有参数的调用:

for epoch in range(epoch_n):
    y_pred = models(x)#此处要有参数
    loss = loos_f(y_pred, y)
    if epoch%100 is 0:
        print("Epoch:{}, Loss:{:.4f}".format(epoch, loss.data))
    models.zero_grad()
    loss.backward()
    for param in models.parameters():
        param.data -= param.grad.data * learning_rate

最终输出结果如下:

Epoch:8800, Loss:1.0939
Epoch:8900, Loss:1.0939
Epoch:9000, Loss:1.0938
Epoch:9100, Loss:1.0937
Epoch:9200, Loss:1.0936
Epoch:9300, Loss:1.0935
Epoch:9400, Loss:1.0935
Epoch:9500, Loss:1.0934
Epoch:9600, Loss:1.0933
Epoch:9700, Loss:1.0932
Epoch:9800, Loss:1.0931
Epoch:9900, Loss:1.0931

一直是收敛的,说明是正确的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值