将Keras(Tensorflow)卷积神经网络转换为PyTorch卷积网络?

时间:2019-03-27 15:34:47

标签: python keras pytorch

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

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

1 个答案:

答案 0 :(得分:1)

关于填充,

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-输出宽度

Wout =((WF + 2P)/ S)+1

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

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

关于in_channels,out_chanels和过滤器

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