LeNet-5代码举例
时间: 2024-09-13 09:09:56 浏览: 45
LeNet-5 是一种用于手写数字识别的卷积神经网络(CNN)架构,由Yann LeCun等人在1998年提出。它是最早成功的神经网络之一,广泛用于图像识别领域。LeNet-5的典型结构包括交替的卷积层、激活函数层和池化层,以及最后的全连接层和输出层。
以下是一个简化版的LeNet-5网络的伪代码示例,使用了深度学习框架PyTorch的语法风格:
```python
import torch
import torch.nn as nn
import torch.nn.functional as F
class LeNet5(nn.Module):
def __init__(self):
super(LeNet5, self).__init__()
# 定义第一层卷积层
self.conv1 = nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5, stride=1, padding=2)
# 定义第二层卷积层
self.conv2 = nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5, stride=1)
# 定义全连接层
self.fc1 = nn.Linear(in_features=16*5*5, out_features=120)
self.fc2 = nn.Linear(in_features=120, out_features=84)
self.fc3 = nn.Linear(in_features=84, out_features=10)
def forward(self, x):
# 通过第一个卷积层后接最大池化层
x = F.max_pool2d(F.relu(self.conv1(x)), kernel_size=2, stride=2)
# 通过第二个卷积层后接最大池化层
x = F.max_pool2d(F.relu(self.conv2(x)), kernel_size=2, stride=2)
# 展平多维的卷积图层
x = x.view(x.size(0), -1)
# 通过第一个全连接层
x = F.relu(self.fc1(x))
# 通过第二个全连接层
x = F.relu(self.fc2(x))
# 通过第三个全连接层得到最终输出
x = self.fc3(x)
return x
# 实例化网络
net = LeNet5()
# 假设输入数据为单通道图片,大小为32x32
input_data = torch.randn(1, 1, 32, 32)
# 前向传播得到输出
output = net(input_data)
```
这段代码定义了一个LeNet-5模型,包括两个卷积层,每个卷积层后面跟着一个激活函数和一个最大池化层,以及三个全连接层。这个模型可以处理32x32像素的单通道图像,并输出一个长度为10的向量,对应于10个手写数字(0-9)的分类。
阅读全文