Som*_*ing 4 conv-neural-network keras tensorflow zero-padding
我的问题:
我进行的一个简单的实验表明,在 Keras/TF 中的 conv2d 层中使用与在前面的零填充层中padding='SAME'使用不同。padding='VALID'
实验说明 - 如果您有兴趣进一步阅读:
我使用该onnx2keras包将我的 Pytorch 模型转换为 keras/TF。
当onnx2keras遇到 ONNX 模型中的卷积层时,它会将其转换为带填充的padding > 0Keras 层(即无填充!),前面是 Keras层。这非常有效,并且返回与 Pytorch 网络产生的输出相同的输出。Conv2DvalidZeroPadding2D
我仍然觉得奇怪的是它不简单地使用padding='SAME',因为大多数参考文献都说 Keras/TF 使用零填充,就像 Pytorch 一样。
尽管如此,我还是onnx2keras对其进行了修补并使其生成Conv2D层,padding='SAME'而不是'VALID'使用前面的零填充层进行填充的现有解决方案。这使得生成的模型返回的输出与具有零填充层的输出不同,当然也不同于我的 Pytorch 模型,在补丁之前它是相同的。
小智 7
padding='Same'在 Keras 中,意味着当输入大小和内核大小不完全匹配时,根据需要添加填充以弥补重叠。
填充='相同'的示例:
# Importing dependency
import keras
from keras.models import Sequential
from keras.layers import Conv2D
# Create a sequential model
model = Sequential()
# Convolutional Layer
model.add(Conv2D(filters=24, input_shape=(5,5,1), kernel_size=(2,2), strides =(2,2) ,padding='Same'))
# Model Summary
model.summary()
Run Code Online (Sandbox Code Playgroud)
代码的输出 -
Model: "sequential_20"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_28 (Conv2D) (None, 3, 3, 24) 120
=================================================================
Total params: 120
Trainable params: 120
Non-trainable params: 0
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)
图示: 下图显示了当 padding='Same' 时输入的填充 (input_shape=(5,5,1), kernel_size=(2,2), strides =(2,2))。
padding='Valid'在 Keras 中意味着不添加填充。
padding='Valid' 的示例: Conv2D 使用了与我们上面用于 padding = 'Same' 相同的输入。即 (input_shape=(5,5,1), kernel_size=(2,2), strides =(2, 2))
# Importing dependency
import keras
from keras.models import Sequential
from keras.layers import Conv2D
# Create a sequential model
model = Sequential()
# Convolutional Layer
model.add(Conv2D(filters=24, input_shape=(5,5,1), kernel_size=(2,2), strides =(2,2) ,padding='Valid'))
# Model Summary
model.summary()
Run Code Online (Sandbox Code Playgroud)
代码的输出 -
Model: "sequential_21"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_29 (Conv2D) (None, 2, 2, 24) 120
=================================================================
Total params: 120
Trainable params: 120
Non-trainable params: 0
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)
图示:
下图显示当 padding='Valid' 时,没有为输入添加填充(input_shape=(5,5,1)、kernel_size=(2,2)、strides =(2,2))。

现在让我们尝试用于padding='Valid'输入的相同代码(input_shape=(6,6,1)、kernel_size=(2,2)、strides =(2,2))。这里的padding='Valid'行为应该与 相同padding='Same'。
代码 -
# Importing dependency
import keras
from keras.models import Sequential
from keras.layers import Conv2D
# Create a sequential model
model = Sequential()
# Convolutional Layer
model.add(Conv2D(filters=24, input_shape=(6,6,1), kernel_size=(2,2), strides =(2,2) ,padding='Valid'))
# Model Summary
model.summary()
Run Code Online (Sandbox Code Playgroud)
代码的输出 -
Model: "sequential_22"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_30 (Conv2D) (None, 3, 3, 24) 120
=================================================================
Total params: 120
Trainable params: 120
Non-trainable params: 0
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3686 次 |
| 最近记录: |