在对偶数卷积及其在时间卷积网络中的应用进行了一些思考之后,我决定,下面的实验将为 tensorflow/keras 中偶数卷积的居中给出答案:
import keras
import numpy as np
import tensorflow as tf
import keras.backend as K
import keras.layers as layers
from keras.layers import Conv2D, Input
from keras.initializers import Constant
if __name__ == '__main__':
inputs = Input(shape=(None,1,1))
even_conv = Conv2D(1,(4,1),padding="same",
kernel_initializer=Constant(value=1.),use_bias=False)(inputs)
f = K.function(inputs=[inputs],outputs=[even_conv])
test_input = np.arange(10)[np.newaxis,...,np.newaxis,np.newaxis].astype(np.float)
result = f(inputs=[test_input])[0]
print(np.squeeze(test_input))
# [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
print(np.squeeze(result))
# [ 3. 6. 10. 14. 18. 22. 26. 30. 24. 17.]
正如您所见,“相同”填充输入数组在开头填充了 1 个零,最后填充了 2 个零:[0. 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 0. 0.]。因此对于 tensorflow,即使大小的内核中心将遵循 4 内核:-1 0 +1 +2 和 2*n 大小的内核:-(n-1), -(n-2),... -1, 0, +1,... +(n-1), +n,