自定义神经网络——前向传播
import torch
import torch.nn as nn
from torchsummary import summary
'''自定义神经网络步骤:1.继承2.实现两个方法__init__、forward()'''class Net(nn.Module):def __init__(self):super().__init__() # 继承父类init# super(Net, self).__init__() 与上一行代码同作用# 定义隐藏层# 隐藏层1 初始化参数 一般只初始化w,不用初始化b(bias会默认初始)self.linear1 = nn.Linear(in_features=3, out_features=3) # 输入特征数,输出特征数nn.init.xavier_uniform_(self.linear1.weight)nn.init.ones_(self.linear1.bias) # 练习写# 隐藏层2self.linear2 = nn.Linear(in_features=3, out_features=2) # 输入特征数,输出特征数nn.init.kaiming_normal_(self.linear2.weight)nn.init.ones_(self.linear2.bias) # 练习写# 定义输出层self.out = nn.Linear(in_features=2, out_features=2)# 创建前向传播方法, 调用神经网络模型对象时自动执行forward()方法def forward(self, x):# 数据经过第一个线性层,使用sigmoid激活函数x = torch.sigmoid(self.linear1(x))# 数据经过第二个线性层,使用relu激活函数x = torch.relu(self.linear2(x))# 数据经过输出层,使用softmax激活函数# dim=-1:每一维度行数据相加为1x = torch.softmax(self.out(x), dim=-1)return xdef test_my_model():model = Net()print(model)#准备数据input=torch.randn(2,3) #两行三列,三个特征print(input.shape)# 给摸行喂数据output=model(input)print(output.shape)# 计算模型参数summary(model, input_size=(3,))# 查看模型参数for name, parameter in model.named_parameters():# print('name--->', name)# print('parameter--->', parameter)print(name, parameter)if __name__ == '__main__':test_my_model()