一、搭建神经网络
本案例
搭建神经网络,这里是一个简单的全连接神经网络
这里的全连接神经网络组成:
隐藏层1:nn.Linear(3,3),权重初始化采用标准化的xavier初始化 激活函数使用sigmoid
隐藏层2:nn.Linear(3,2),权重初始化采用标准化的He初始化 激活函数采用relu
输出层: nn.Linear(2,2),采用softmax做数据归一化,权重初始化采用标准化的xavier初始化

二、实现
自定义模型类,搭建自己的神经网络
1.继承 nn.Module 基础模型
python
class MyModel(nn.Module)
2.定义__init__方法,定义网络层
python
def __init__(self):
super().__init__()
self.layer1 = nn.Linear(3, 3)
self.layer2 = nn.Linear(3, 2)
self.layer3 = nn.Linear(2, 2)
# 参数 初始化 (一般不需要)
# nn.init.xavier_normal_(self.layer1.weight)
# nn.init.zeros_(self.layer1.bias)
#
# nn.init.kaiming_normal_(self.layer2.weight)
# nn.init.zeros_(self.layer2.bias)
#
# nn.init.xavier_normal_(self.layer3.weight)
# nn.init.zeros_(self.layer3.bias)
3.重新forward方法,实现前向传播 (基类 方法)
python
def forward(self, x):
# x: 2D:(batch_size, 3)
x = torch.sigmoid(self.layer1(x)) # 隐藏层1:Sigmoid激活
x = torch.relu(self.layer2(x)) # 隐藏层2:ReLU激活
x = torch.softmax(self.layer3(x), dim=-1) # 输出层:Softmax激活
'''
输出层用 Softmax (dim=-1)
dim=-1 = 对 ** 最后一个维度(特征维度)** 做归一化
Softmax 输出总和 = 1,代表2 个类别的预测概率分布
'''
#输出2个
print(x)
return x
主函数入口
python
if __name__ == "__main__":
model = MyModel()
# model = model.to(device)
# 查看模型的参数数量
summary(model, input_size=(3,), device="cpu")
终端打印:
print(x)
因为最后一个用softmax,结果集 是概率分布,累加和为1。
即下图. 0.3285 + 0.6715 = 1


-1代表 batch_size(样本数量),任意大小都可以- 后面数字是特征维度,完全对应每层输出维度
- 输入:
(batch, 3) - layer1 输出:
(batch, 3) - layer2 输出:
(batch, 2) - layer3 输出:
(batch, 2)
总参数量求和
12+8+6=26
++全连接层输入最后一维 = 第一层 in_features++