卷积层过滤器大小如何影响输入长度以及如何保持标签大小相同

How convolutional layer filter size affects input length and how to keep labels the same size

假设我们在 tensorflow.keras 中有一个输入大小为 100 的一维卷积层(为简单起见,忽略批处理和通道维度),内核大小为 51(实际上它可以通过应用更小的过滤器来实现在多层中)并且我们希望保持输出的长度与输入相同(填充=相同)。我想知道在应用过滤器后哪些索引将被填充为零,是最右边的 50 个还是最左边的 50 个,或者每边 25 个。此外,如果每个元素都有一个标签,那么将标签数量减少到 50 以仍然最好地表示输入的最佳方法是什么。

填充是两边的,在应用卷积之前,你可以很容易地用这个 ones 和 ones 的卷积代码看到这一点。 (预期结果是中心的内核大小)

import numpy as np
from keras.layers import Input, Conv1D
from keras.models import Model

length = 100
filt = 51

ins = Input((length,1))
outs = Conv1D(1, filt, padding='same', kernel_initializer='ones', use_bias=False)(ins)
model = Model(ins, outs)

preds = model.predict(np.ones((1,length,1)))[0, :, 0]
print('result length = ', len(preds))
print(preds)

输出:

result length =  100
[26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
 44. 45. 46. 47. 48. 49. 50. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51.
 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51.
 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51. 51.
 51. 51. 51. 50. 49. 48. 47. 46. 45. 44. 43. 42. 41. 40. 39. 38. 37. 36.
 35. 34. 33. 32. 31. 30. 29. 28. 27. 26.]

注意它是如何逐渐缩小到边界的。这些是随着过滤器滑动而增加的零数。


最后一个问题没有明确的答案。这取决于您需要做什么。 "best represent" 是什么意思?你可以用一个Dense(50),行吗?这取决于你想要什么。您可以将 100 重塑为 50x2 并取新轴的平均值……确实有很多解决方案,每个解决方案都有自己的属性。