#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, которые имеют одинаковую архитектуру, за исключением заполнения, и выбрать тот, который имеет лучшую точность.
Комментарии:
1. Спасибо — я неверно истолковал размер ядра в 1D свертке!