首页 > 解决方案 > Tensorflow 中的 Conv1D 混淆

问题描述

由于一些维度问题,试图实现一篇论文并遇到一些砖墙。我的输入是单声道音频数据,其中 128 帧 50ms 的 16kHz 采样音频被输入网络。所以我的输入形状是:[128,0.005*16000, 1] 这是图层详细信息 -

1.) conv-bank 块:Conv1d-bank-8, LeReLU, IN (instance normalization) 我使用:

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,stride=2, LReLu, IN, RES (Residual)

这就是我卡住的地方,第二个卷积的输出形状和 (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].

标签: pythontensorflowaudiodeep-learningsignal-processing

解决方案


当您使用 stride = 2 在 block1 上运行 conv1d 时,输入数据减半,因为 conv1d 有效地仅对备用数字进行采样,并且您还更改了通道数。这通常可以通过 1x1 conv 与 stride 2 和过滤器 512 对输入进行下采样来解决,但如果你可以分享这篇论文,我可以更具体。


推荐阅读