Смущение Conv1D в Tensorflow - PullRequest
0 голосов
/ 03 июля 2018

Попытка реализовать бумагу и столкнуться с некоторыми кирпичными стенами из-за некоторых проблем с размерностью. Мой ввод - это монофонические аудиоданные, в которые 128 кадров 50 мс дискретизированного звука 16 кГц поступают в сеть. Итак, моя форма ввода: [128,0.005 * 16000, 1] Вот детали слоя -

1.) Блок conv-bank: Conv1d-bank-8, LeReLU, IN (нормализация экземпляра) Я добиваюсь этого, используя:

bank_width = 8
conv_bank_outputs = tf.concat([ tf.layers.conv1d(input,1,k,activation=tf.nn.leaky_relu,padding="same") for k in range(1, bank_width + 1)], axes = -1)

2.) Conv-block: C-512-5, LReLu -> C-512-5, шаг = 2, LReLu, IN, RES (Остаточный)

Здесь я застреваю, формы вывода второй свертки и ввода в слой (2) не совпадают. Я не могу обдумать это.

Я добиваюсь этого, используя:

block_1 = tf.layers.conv1d(input,filters=512,kernel_size=5,activation=tf.nn.leaky_relu,padding="same")
block_2 = tf.layers.conv1d(block_1,filters=512,kernel_size=5,strides=2,activation=tf.nn.leaky_relu,padding="same")
IN = tf.contrib.layers.instance_norm(block_2)
RES = IN + input

Ошибка: ValueError: Dimensions must be equal, but are 400 and 800 for 'add' (op: 'Add') with input shapes: [128,400,512], [128,800,1024].

1 Ответ

0 голосов
/ 04 июля 2018

Когда вы запускаете conv1d для block1 с шагом = 2, входные данные делятся пополам, так как conv1d эффективно выбирает только альтернативные числа, а также вы изменили количество каналов. Обычно это обходится путем понижающей дискретизации входного сигнала 1x1 с шагом 2 и фильтрами 512, хотя я могу быть более конкретным, если вы сможете поделиться статьей.

...