Keras和PyTorch使用不同的填充参数:Keras需要输入字符串,而PyTorch则使用数字。有什么区别,又如何将其翻译为另一种(在任何一个框架中,什么代码都能得到等效的结果)?
PyTorch还接受args in_channels,out_chanels,而keras仅接受称为filter的参数。 “过滤器”是什么意思?
答案 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(在第一层的情况下)自动推断出来的。