在 torch.nn.Sequential 中重新排列神经网络层
Rearrange neural network layers in torch.nn.Sequential
我期待找到一种重新排列顺序的方法,因为我正在尝试构建一个可逆的卷积神经网络,并且我有很多层,我只想颠倒顺序中层的顺序。
例如
self.features.append(nn.Conv2d(1, 6, 5))
self.features.append(nn.LeakyReLU())
self.features = nn.Sequential(*self.features)
然后我只想反转它,首先进行激活,然后进行卷积。
我知道这个示例很简单,但就我而言,我有很多层,我无法通过编写反向路径来完成。
试试这个:
nn.Sequential(*reversed([layer for layer in original_sequential]))
例如:
>>> original_sequential = nn.Sequential(nn.Conv2d(1,6,5), nn.LeakyReLU())
>>> original_sequential
Sequential(
(0): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))
(1): LeakyReLU(negative_slope=0.01)
)
>>> nn.Sequential(*reversed([layer for layer in original_sequential]))
Sequential(
(0): LeakyReLU(negative_slope=0.01)
(1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))
)
我期待找到一种重新排列顺序的方法,因为我正在尝试构建一个可逆的卷积神经网络,并且我有很多层,我只想颠倒顺序中层的顺序。 例如
self.features.append(nn.Conv2d(1, 6, 5))
self.features.append(nn.LeakyReLU())
self.features = nn.Sequential(*self.features)
然后我只想反转它,首先进行激活,然后进行卷积。 我知道这个示例很简单,但就我而言,我有很多层,我无法通过编写反向路径来完成。
试试这个:
nn.Sequential(*reversed([layer for layer in original_sequential]))
例如:
>>> original_sequential = nn.Sequential(nn.Conv2d(1,6,5), nn.LeakyReLU())
>>> original_sequential
Sequential(
(0): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))
(1): LeakyReLU(negative_slope=0.01)
)
>>> nn.Sequential(*reversed([layer for layer in original_sequential]))
Sequential(
(0): LeakyReLU(negative_slope=0.01)
(1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))
)