pytorch中的ModuleList、Sequential和functional

ModuleList是将子Module作为一个List来保存的,可以通过下标进行访问,类似于Python中的List,但是该类需要手动实现forward函数。

Sequential内部自动实现了forward函数,可以在forward函数里直接调用定义的Sequentila结构体。

functional可以直接使用静态的参数,调用不用学习的参数,直接输出得到结果。结构类似于functional(input,model.weight,model.bias).   其中model是已经学习完毕的模型。不具备可学习的参数的函数,可以直接采用functional里的使用,比如functional.pool,functional.relu,因此也可以不用放在构造函数中,直接在forward里使用即可。

nn.Module中的权重和偏移等参数都采用了合理的初始化,合理的初始化能够保证网络有效的收敛,错误的初始化会使网络崩溃。t.Tensor中返回的是内存中的随机数,有可能会造成溢出或者梯度消失(梯度消失一般都是因为数据问题,要么是计算出的数超出了当前分配的字节大小,要么是错误使用了公式,比如除数出现0的情况,log上出现-1的情况)。因此sometimes需要自己进行参数自定义初始化。例如model.weigt.data.normal_(0,std).对模型model里的权重数据进行初始化,范围在0到std之间。

作者还在继续学习中,这是学习了3个模块的总结,有不对之处还请指出,共同进步。

你可能感兴趣的:(pytorch中的ModuleList、Sequential和functional)