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

Tey*_*dge 2 python keras pytorch

Keras 和 PyTorch 使用不同的参数进行填充:Keras 需要输入字符串,而 PyTorch 使用数字。有什么区别,如何将一个框架转换为另一个框架(哪些代码在任一框架中获得相同的结果)?

PyTorch 还采用参数 in_channels、out_chanels,而 keras 只采用称为过滤器的参数。“过滤器”是什么意思?

Man*_*han 6

关于填充,

\n\n

Keras => \'有效\' - 无填充;\n \'same\' - 输入被填充,以便输出形状与输入形状相同

\n\n

Pytorch => 你明确指定填充

\n\n

有效填充

\n\n
>>> model = keras.Sequential()\n>>> model.add(keras.layers.Conv2D(filters=10, kernel_size=3, padding=\'valid\', input_shape=(28,28,3)))\n>>> model.layers[0].output_shape\n(None, 26, 26, 10)\n\n>>> x = torch.randn((1,3,28,28))\n>>> conv = torch.nn.Conv2d(in_channels=3, out_channels=10, kernel_size=3)\n>>> conv(x).shape\ntorch.Size([1, 10, 26, 26])\n
Run Code Online (Sandbox Code Playgroud)\n\n

相同的填充

\n\n
>>> model = keras.Sequential()\n>>> model.add(keras.layers.Conv2D(filters=10, kernel_size=3, padding=\'same\', input_shape=(28,28,3)))\n>>> model.layers[0].output_shape\n(None, 28, 28, 10)\n\n>>> x = torch.randn((1,3,28,28))\n>>> conv = torch.nn.Conv2d(in_channels=3, out_channels=10, kernel_size=3, padding=1)\n>>> conv(x).shape\ntorch.Size([1, 10, 28, 28])\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

Wout = ((W\xe2\x88\x92F+2P)/S)+1

\n\n

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

\n\n

http://cs231n.github.io/卷积网络/

\n\n

关于in_channels、out_channels和过滤器,

\n\n

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

\n