pytorch六:nn.Module

autograd实现了自动微系统,然而对于深度学习来说过于底层,本章将介绍nn模块,是构建于autograd之上的神经网络模块。除了nn之外,我们还会介绍神经网络中常用的工具,比如优化器optim、初始化init等。

使用autograd可实现深度学习模型,但其抽象程度较低,如果用其来实现深度学习模型,则需要编写的代码量极大。在这种情况下,torch.nn应运而生,其是专门为深度学习设计的模块。

torch.nn的核心数据结构是Module,它是一个抽象的概念,即可以表示神经网路中的某个层,也可以表示一个包含很多层的神经网络。在实际使用中,最常见的做法是继承nn.Module,撰写自己的网路层。

下面先来看看如何使用nn.Module实现自己的全连接层:

import torch as t
from torch.autograd import Variable as V
from torch import nn

class Linear(nn.Module):
    def __init__(self,int_features,out_features):
        super(Linear,self).__init__()  #执行父类的构造函数,等价于nn.Module.__init__(self)
        self.w = nn.Parameter(t.randn(int_features,out_features))
        self.b = nn.Parameter(t.randn(out_features))
    def forward(self,x):
        x = x.mm(self.w)
        return x + self.b.expand_as(x)

layer = Linear(4,3)
input = V(t.randn(2,4))
output = layer(input)#等价于layer.forward(input),也等价于layer.__call__(input)
output
>>tensor([[-1.

你可能感兴趣的:(pytorch)