Keras和PyTorch使用不同的填充参数:Keras需要输入字符串,而PyTorch使用数字。有什么区别,以及如何将其翻译为另一种(在任何一个框架中,什么代码得到等效的结果)?

PyTorch还接受args in_channels,out_chanels,而keras仅接受称为filter的参数。 “过滤器”是什么意思?

最佳答案

关于填充,

Keras =>'valid'-没有填充;
         'same'-填充输入,以便输出形状与输入形状相同

Pytorch =>您显式指定填充

有效填充

>>> model = keras.Sequential()
>>> model.add(keras.layers.Conv2D(filters=10, kernel_size=3, padding='valid', input_shape=(28,28,3)))
>>> model.layers[0].output_shape
(None, 26, 26, 10)

>>> x = torch.randn((1,3,28,28))
>>> conv = torch.nn.Conv2d(in_channels=3, out_channels=10, kernel_size=3)
>>> conv(x).shape
torch.Size([1, 10, 26, 26])


相同的填充

>>> model = keras.Sequential()
>>> model.add(keras.layers.Conv2D(filters=10, kernel_size=3, padding='same', input_shape=(28,28,3)))
>>> model.layers[0].output_shape
(None, 28, 28, 10)

>>> x = torch.randn((1,3,28,28))
>>> conv = torch.nn.Conv2d(in_channels=3, out_channels=10, kernel_size=3, padding=1)
>>> conv(x).shape
torch.Size([1, 10, 28, 28])


W-输入宽度,F-过滤器(或内核)大小,P-填充,S-步幅,Wout-输出宽度

瓦特=((WF + 2P)/ S)+1

高度也是如此。使用此公式,您可以计算在输出中保留输入宽度或高度所需的填充量。

http://cs231n.github.io/convolutional-networks/

关于in_channels,out_chanels和过滤器,

过滤器与out_channels相同。在Keras中,in_channels是从上一层形状或input_shape(在第一层的情况下)自动推断出来的。

关于python - 将Keras(Tensorflow)卷积神经网络转换为PyTorch卷积网络?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55381052/

10-12 17:02
查看更多