【深度学习】Pytorch学习笔记(一)
Pytorch
中需要自己定义网络模型,该模型需要封装到一个自定义的类中,该类只是一个子类,其继承的父类为torch.nn.Module
,可见如下树形结构图:Module
实际又是继承了Object
类,关于为什么要继承Object
类有兴趣的可以看这篇博客MRO算法
也就是说,自定义的模型除了要有__init__()
构造函数之外,还必须有forward
函数,重写父类Module
的该方法。 在子类的__init__()
方法中必须调用父类的__init__()
方法以初始化父类的属性,常用写法为super(自定义类名称,self ).__init__()
或者Module.__init__(self)
。
然而forward
函数不需要用户自己调用,只需要实例化用户自定义的模型对象即可,就会自动调用forward
函数,这种机制类似于hook(钩子)函数,forward
函数挂接在所在类的__init__()
方法上,所以实例化对象的同时也调用了forward
方法。
在用户自定义的模型类中,__init__()
构造函数是用来初始化神经网络的层结构,forward
函数用来实现神经网络的前向传播。