Как размер фильтра сверточного слоя влияет на длину ввода и как сохранить метки одинакового размера - PullRequest
2 голосов
/ 26 сентября 2019

Предположим, что у нас есть одномерный сверточный слой в tenorflow.keras с входным размером 100 (игнорируя размеры пакета и канала для простоты), размер ядра равен 51 (в действительности это может произойти при применении меньших фильтров в нескольких слоях)и мы хотим сохранить длину вывода одинаковой на входе (padding = same).Я хотел бы знать, какие индексы будут заполнены нулями после применения фильтра, будет ли это 50 самых правых или 50 самых левых или 25 с каждой стороны.Также, если у меня есть метка для каждого элемента, что будет лучшим способом уменьшить количество меток до 50, чтобы все еще лучше представлять входные данные.

1 Ответ

4 голосов
/ 26 сентября 2019

Заполнение выполняется с обеих сторон, перед тем как применить свертку, вы можете легко увидеть это с помощью этого кода свертки с одним.(Ожидаемый результат - размер ядра для центра)

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 и взять среднее значение для новой оси .... Есть действительно много решений, каждое из которых имеет свои свойства.

...