Должен ли 1D CNN нуждаться в дополнении для сохранения длины ввода?

#python #tensorflow #keras #neural-network #conv-neural-network

#python #тензорный поток #keras #нейронная сеть #conv-нейронная сеть

Вопрос:

Разве 1D CNN с фильтром stride = 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), но, очевидно, мне не хватает источника уменьшения размера в этом conv. слой.

Ответ №1:

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

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

Без заполнения:

введите описание изображения здесь

С дополнением:

введите описание изображения здесь

Следует ли вам использовать дополнение или нет, это скорее вопрос точности. Как обнаружили Иэн Гудфеллоу, Йошуа Бенгио и Аарон Курвиль в своей книге по глубокому обучению, оптимальное заполнение (по крайней мере, для 2D-изображений) находится где-то между «нет» и «то же самое»

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

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

Комментарии:

1. Спасибо — я неверно истолковал размер ядра в 1D свертке!