神经网络搭建和参数计算
在pytorch中定义深度神经网络其实就是层堆叠的过程,继承自nn.Module,实现两个方法:
- _init_方法中定义网络中的层结构,主要是全连接层,并进行初始化
- forward方法,在实例化模型的时候,底层会自动调用该函数。该函数中为初始化定义的
layer传入数据,进行前向传播等。

code
python
'''
神经网络搭建
步骤:准备数据-搭建神经网络-模型训练-模型测试
搭建神经网络步骤:定义一个类,继承nn.Module
在__init__方法中定义网络的层
在forward方法中定义网络的前向传播
'''
from cgi import print_arguments
import torch
import torch.nn as nn
from torchsummary import summary
import sys
sys.stdout.reconfigure(encoding='utf-8') # Python 3.7+ 支持
#todo:搭建神经网络
class ModelDemo(nn.Module):
#在__init__方法中定义网络的层
def __init__(self):
super().__init__()
#搭建神经网络:隐藏层+输出层
#隐藏层
self.linear1=nn.Linear(3,3)
self.linear2=nn.Linear(3,2)
#输出层
self.output=nn.Linear(2,2)
#对隐藏层进行初始化
nn.init.xavier_normal_(self.linear1.weight)
nn.init.zeros_(self.linear1.bias)
nn.init.xavier_normal_(self.linear2.weight)
nn.init.zeros_(self.linear2.bias)
def forward(self,x):
#隐藏层:加权求和+激活函数
#分解版写法
# x=slef.liner1(x)
# x=torch.sigmoid(x)
#合并版
x=torch.sigmoid(self.linear1(x))
x=torch.relu(self.linear2(x))
#dim=-1表示按行计算
x=torch.softmax(self.output(x),dim=-1)
return x
def train():
#创建模型
model=ModelDemo()
# print('我的模型:',model)
#创建数据集
data=torch.randn(size=(5,3))
print('我的数据集:',data)
print('我的数据集的形状:',data.shape)
print('我的数据集的是否自动微分:',data.requires_grad)
#调用神经网络
output=model(data)
print('我的输出:',output)
print('我的输出的形状:',output.shape)
print('我的输出的是否自动微分:',output.requires_grad)
#计算和查看模型参数
print('==============计算模型参数数===============')
summary(model,input_size=(5,3))
print('==============查看模型参数数===============')
for name,param in model.named_parameters():
print('神经网络层级:',name)
print('参数:',param)
print('--------------------------')
if __name__ == '__main__':
train()