Нужно ли заполнять 1D CNN для сохранения длины ввода? - PullRequest
1 голос
/ 16 апреля 2019

Разве 1D CNN с шагом = 1 и 1 не должен иметь выходную длину, равную входной длине без необходимости заполнения?

Я думал, что это так, но создал модель Keras с этими характеристиками, которая говорит, что выходная форма равна (17902,1), когда входная форма равна (17910,1). Мне интересно, почему размерность была уменьшена, поскольку шаг равен 1, а это 1D свертка.

model = keras.Sequential([
layers.Conv1D(filters=1,kernel_size=9,strides=1,activation=tf.nn.relu,input_shape=X_train[0].shape)
        ])

Я ожидаю, что выходная форма этой модели должна быть (17910,1), но, очевидно, мне не хватает источника уменьшения размеров в этом конв. слой.

1 Ответ

4 голосов
/ 16 апреля 2019

Длина вашего выходного вектора зависит от длины входных данных и размера вашего ядра.Поскольку у вас размер ядра 9, вы получите 17902 свертки с вашим вводом и, следовательно, с выводом формы (17902,1) (без заполнения).

Для лучшего понимания:

Безнабивка:

enter image description here

С набивкой:

enter image description here

Должны ли выиспользовать заполнение или нет, это больше вопрос точности.Как обнаружили Йен Гудфеллоу, Йошуа Бенжио и Аарон Курвиль в своей книге Deep Learning , оптимальное заполнение (по крайней мере, для 2D-изображений) лежит где-то между "нет" и "одинаковыми"

Так что мойБыло бы предложено попробовать два разных CNN, которые имеют одинаковую архитектуру, кроме отступа, и взять тот, который имеет лучшую точность.

(Источник: https://www.slideshare.net/xavigiro/recurrent-neural-networks-2-d2l3-deep-learning-for-speech-and-language-upc-2017)

...