12 从0开始学PyTorch| PyTorch全连接网络:建立区分鸟和飞机的模型
发布人:shili8
发布时间:2025-01-08 18:09
阅读次数:0
**从0开始学PyTorch**
在本系列教程中,我们将一步步地学习如何使用PyTorch进行深度学习。今天,我们将重点讨论全连接网络(Fully Connected Network, FCN)及其应用。
**什么是全连接网络?**
全连接网络是一种最基本的神经网络结构,每个节点都与所有其他节点相连。这意味着每个输入都会经过多次计算,最终得到输出。这种结构通常用于分类问题,例如区分鸟和飞机。
**建立区分鸟和飞机的模型**
我们将使用PyTorch来建立一个简单的全连接网络,以便区分鸟和飞机。假设我们有以下数据:
| 图像 | 类别 |
| --- | --- |
| 鸟 |0 |
| 飞机 |1 |
我们的目标是训练一个模型,使得当输入为鸟时,输出为0,当输入为飞机时,输出为1。
**PyTorch代码示例**
import torchimport torch.nn as nn# 定义全连接网络类class FCN(nn.Module): def __init__(self): super(FCN, self).__init__() # 输入层(28x28) self.fc1 = nn.Linear(784,128) #784=28*28 # 隐藏层 self.fc2 = nn.Linear(128,64) # 输出层 self.fc3 = nn.Linear(64,2) def forward(self, x): # flatten输入 x = x.view(-1,784) # -1表示批量大小不固定 # 全连接网络前向传播 x = torch.relu(self.fc1(x)) # relu激活函数 x = torch.relu(self.fc2(x)) x = self.fc3(x) return x# 初始化模型model = FCN() # 定义损失函数和优化器criterion = nn.CrossEntropyLoss() optimizer = torch.optim.SGD(model.parameters(), lr=0.01) # 模拟数据x = torch.randn(100,784) #100个样本,每个样本28*28图像y = torch.randint(2, (100,)) #100个标签,0或1# 训练模型for epoch in range(10): optimizer.zero_grad() outputs = model(x) loss = criterion(outputs, y) loss.backward() optimizer.step() print('Epoch {}: Loss = {:.4f}'.format(epoch+1, loss.item()))
**注释**
* `FCN`类定义了一个全连接网络结构,每个层都使用PyTorch的`nn.Linear`模块。
* `forward`方法实现了前向传播过程,包括输入层、隐藏层和输出层。
* 模型初始化后,我们定义损失函数(交叉熵)和优化器(随机梯度下降)。
* 我们使用模拟数据进行训练,每个样本28x28图像,标签为0或1。
**总结**
在本教程中,我们学习了全连接网络的基本概念,并建立了一个简单的模型,以便区分鸟和飞机。我们使用PyTorch实现了这个模型,并进行了训练。这种结构通常用于分类问题,可以应用于各种领域。