Я надеялся найти документ с открытым исходным кодом учебного документа по нейронному дискретному представлению для аудио.Я смотрю на этот репозиторий github .В документе говорится, что «кодировщик имеет 6 ступенчатых сверток с шагом 2 и размером окна 4».Код Джереми для кодировщика:
def _encoder(self, x):
'''
Note that we need a pair of reversal to ensure causality.
(i.e. no trailing pads)
`x`: [b, T, c]
'''
k_init = self.arch['initial_filter_width']
b = tf.shape(x)[0]
o = tf.zeros([b, k_init - 1, self.arch['dim_symbol_emb']])
x = tf.concat([o, x], 1)
k_init = self.arch['initial_filter_width']
x = tf.layers.conv1d(
inputs=x,
filters=self.arch['residual_channels'],
kernel_size=k_init,
kernel_regularizer=tf.keras.regularizers.l2(WEIGHT_DECAY),
name='initial_filtering',
kernel_initializer=tf.initializers.variance_scaling(
scale=1.43,
distribution='uniform'),
)
x = tf.nn.leaky_relu(x, 2e-2)
x = tf.reverse(x, [1]) # paired op to enforce causality
for i in range(self.arch['n_downsample_stack']):
conv = tf.layers.conv1d(
inputs=x,
filters=(i + 1) * self.arch['encoder']['filters'],
kernel_size=self.arch['encoder']['kernels'],
strides=2,
padding='same',
# activation=tf.nn.tanh,
kernel_initializer=tf.initializers.variance_scaling(
scale=1.15,
distribution='uniform'),
kernel_regularizer=tf.keras.regularizers.l2(WEIGHT_DECAY),
)
gate = tf.layers.conv1d(
inputs=x,
filters=(i + 1) * self.arch['encoder']['filters'],
kernel_size=self.arch['encoder']['kernels'],
strides=2,
padding='same',
# activation=tf.nn.sigmoid,
kernel_initializer=tf.initializers.variance_scaling(distribution='uniform'),
kernel_regularizer=tf.keras.regularizers.l2(WEIGHT_DECAY),
bias_initializer=tf.initializers.ones,
)
x = tf.nn.tanh(conv) * tf.nn.sigmoid(gate)
x = tf.reverse(x, [1]) # paired op to enforce causality
x = tf.layers.conv1d(
inputs=x,
filters=self.arch['dim_exemplar'],
kernel_size=1,
kernel_initializer=tf.initializers.variance_scaling(
distribution='uniform'),
kernel_regularizer=tf.keras.regularizers.l2(WEIGHT_DECAY),
)
return x
Этот кодировщик имеет 1 + arch ['n_downsample_stack'] + 1 = 8 слоев свертки, в то время как в статье сказано 6, kernel_sizes являются arch ['initial_filter_width'] = 32, arch ['encoder'] ['kernels'] = 5, 5, 5, 5, 5, 5, 1, в то время как в статье говорится 4, и в статье не упоминаются какие-либо элементы в кодировщике.
Я неправильно понимаю код, неправильно понимаю документ или код реализует архитектуру, отличную от описанной в статье?Есть ли где-нибудь рабочая реализация статьи?