python-3.x - 如何在训练 CNN 时为 nn.Linear 层选择参数?
问题描述
我正在尝试训练 CNN 使用 和 层对数据中Fashion-MNIST
的图像进行分类。我在层中遇到了如下所述的代码。Conv2d
Maxpool
Linear
in_features = 12*4*4
nn.Linear
我能否获得有关如何in_features
为 nn.Linear 层选择参数的帮助?
class Network(nn.Module):
def __init__(self):
super(Network, self).__init__()
self.conv1 = nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5)
self.conv2 = nn.Conv2d(in_channels=6, out_channels=12, kernel_size=5)
self.fc1 = nn.Linear(in_features=12*4*4, out_features=120)
self.fc2 = nn.Linear(in_features=120, out_features=60)
self.out = nn.Linear(in_features=60, out_features=10)
解决方案
Fashion-MNIST
数据集中的每个示例都是28 x 28
灰度图像。
- 输入是
28 x 28
- 我们在
5 x 5
没有填充的情况下进行卷积(因为default padding=0
)并且stride=1(by default)
,所以我们在每一边都丢失了2
像素,我们下降到24 x 24
,即,(28-5)/1 + 1 - 然后我们使用感受野执行 maxpooling 操作
2 x 2
,我们将每个维度减半,降低到12 x 12
- 我们再次在没有and的情况下进行另一个
5 x 5
卷积,我们下降到,即 (12-5)/1 + 1padding
stride=1
8 x 8
- 然后,我们执行另一个 maxpooling 操作,我们下拉到
4 x 4
这就是为什么,self.fc1 = nn.Linear(in_features=12*4*4, out_features=120)
。它基本上是n_features_conv * height * width
,其中高度和宽度4
分别是,并且与位于其正上方的层n_features_conv
相同。out_channels
conv2D
请注意,如果您更改输入图像的大小,则必须执行上述计算并Linear
相应地调整第一层。
希望这对你有帮助!
推荐阅读
- python - 有时在我使用 Python 3.9.5 和 Apache 2.4 在 windows10 家庭添加上部署 Django 应用程序后引发 ValueError
- powershell - Microsoft graph powershell - 无法添加许可证
- binance - CCXT 币安 fetch_ohlcv 函数
- c++ - boost::asio::connect 在错误的子网上报告成功
- verilog - 错误:合成不支持在多个单边下分配
- server - 如何将扭曲的 Python 代码托管到 Internet?
- r - ggplot2的世界地图
- android - 在 Kotlin 中按下按钮时,Android 应用程序崩溃
- c - 打印行号随着 C 中的每个输入而递增
- python-3.x - 为什么 Python 不加载 ca 证书?