Заполнение выполняется с обеих сторон, перед тем как применить свертку, вы можете легко увидеть это с помощью этого кода свертки с одним.(Ожидаемый результат - размер ядра для центра)
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.]
Обратите внимание, как оно постепенно уменьшается до границ.По мере скольжения фильтров увеличивается число нулей.
Четкого ответа на последний вопрос нет.Это зависит от того, что вам нужно сделать.Что значит «лучше всего представлять»?Вы можете использовать Dense(50)
, это будет работать?Это зависит от того, что вы хотите.Вы могли бы изменить форму от 100 до 50x2 и взять среднее значение для новой оси .... Есть действительно много решений, каждое из которых имеет свои свойства.