深度学习(3):全连接神经网络构建
前馈神经网络(Feedforward Neural Network,FNN)是一种最基本的神经网络结构,其特点是信息从输入层经过隐藏层单向传递到输出层,没有反馈或循环连接。
全连接神经网络(Fully Connected Neural Network,FCNN)是前馈神经网络的一种,每一层的神经元与上一层的所有神经元全连接,常用于图像分类、文本分类等任务。
一、构建连接神经网络
(1)自定义网络类继承nn.Module
(2)实现__init__方法,定义线性层组件
(3)实现forward方法,实现前向传播
import torch
from torch import nnclass MyNet(nn.Module):#继承父类nn.Moduledef __init__(self,input_featrues,out_features):super().__init__()self.fc1 = nn.Linear(input_features, 64)self.fc2 = nn.Linear(64, 32)self.fc3 = nn.Linear(32, output_features)def forward(self, x):x = self.fc1(x)x = self.fc2(x)x = self.fc3(x)return x
model = MyNet(10, 1)
print(model)
"""
MyNet((fc1): Linear(in_features=10, out_features=64, bias=True)(fc2): Linear(in_features=64, out_features=32, bias=True)(fc3): Linear(in_features=32, out_features=1, bias=True)
)
"""
1、单层网络直接使用Linear构建
model = nn.Linear(10, 1)
print(model)
#Linear(in_features=10, out_features=1, bias=True)
2、Sequential顺序容器,默认从上到下一次加载实现forward
model = nn.Sequential(nn.Linear(10, 64),nn.Linear(64, 32),nn.Linear(32, 10),
)
print(model)
"""
Sequential((0): Linear(in_features=10, out_features=64, bias=True)(1): Linear(in_features=64, out_features=32, bias=True)(2): Linear(in_features=32, out_features=10, bias=True)
)
"""
二、全连接基本组件认知
import torch
from torch import nn,optimdef test01():#单层网络model = nn.Linear(128,10)#定义损失函数criterion = nn.MSELoss()#定义优化器opt = optim.SGD(model.parameters(),lr=0.01)# 数据准备x = torch.randn(1000, 128)y = torch.randn(1000, 10)for epoch in range(10):#得到预测值y_pred = model(x)#计算lossloss = criterion(y_pred,y)# 梯度清零opt.zero_grad()# 反向传播,计算梯度loss.backward()# 模型参数更新opt.step()print(f'epoch:{epoch}, loss:{loss.item()}')
"""
epoch:0, loss:1.3215197324752808
epoch:1, loss:1.3195496797561646
epoch:2, loss:1.3175891637802124
epoch:3, loss:1.3156381845474243
epoch:4, loss:1.3136966228485107
epoch:5, loss:1.3117645978927612
epoch:6, loss:1.3098417520523071
epoch:7, loss:1.3079285621643066
epoch:8, loss:1.306024432182312
epoch:9, loss:1.304129719734192
"""if __name__ == '__main__':test01()