pytorch以lenet为基础,奖激活函数替换为relu,池化方式为最大池化,5*5的卷积核改为卷积核大小为7,在全连接层后加入dropout层,卷积层后加入batchnorm层*7
时间: 2024-05-10 12:19:32 浏览: 86
LeNet的pytorch实现
好的,以下是基于PyTorch的代码实现:
```python
import torch
import torch.nn as nn
class LeNet(nn.Module):
def __init__(self):
super(LeNet, self).__init__()
self.conv1 = nn.Conv2d(1, 6, 7) # 5*5的卷积核改为卷积核大小为7
self.relu = nn.ReLU(inplace=True) # 激活函数替换为relu
self.maxpool = nn.MaxPool2d(2, 2) # 池化方式为最大池化
self.conv2 = nn.Conv2d(6, 16, 7) # 5*5的卷积核改为卷积核大小为7
self.fc1 = nn.Linear(16 * 4 * 4, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
self.dropout = nn.Dropout(p=0.5) # 在全连接层后加入dropout层
self.batchnorm1 = nn.BatchNorm2d(6) # 卷积层后加入batchnorm层
self.batchnorm2 = nn.BatchNorm2d(16)
def forward(self, x):
x = self.conv1(x)
x = self.batchnorm1(x) # 卷积层后加入batchnorm层
x = self.relu(x) # 激活函数替换为relu
x = self.maxpool(x) # 池化方式为最大池化
x = self.conv2(x)
x = self.batchnorm2(x) # 卷积层后加入batchnorm层
x = self.relu(x) # 激活函数替换为relu
x = self.maxpool(x) # 池化方式为最大池化
x = x.view(-1, 16 * 4 * 4)
x = self.fc1(x)
x = self.relu(x) # 激活函数替换为relu
x = self.dropout(x) # 在全连接层后加入dropout层
x = self.fc2(x)
x = self.relu(x) # 激活函数替换为relu
x = self.dropout(x) # 在全连接层后加入dropout层
x = self.fc3(x)
return x
```
这里我们将原来的LeNet模型进行了修改,具体改动包括:
- 将激活函数替换为ReLU;
- 将池化方式改为最大池化;
- 将卷积核大小从5\*5改为7\*7;
- 在全连接层后加入了Dropout层;
- 在卷积层后加入了BatchNorm层;
以上改动都是基于最近深度学习领域的一些优化技巧,可以有效提升模型性能。
阅读全文