凯拉斯。是否可以将一层的批处理输出用作下一层的输入?

时间:2019-03-29 18:07:30

标签: python keras

我正在尝试训练Keras的VGGish实现。 https://github.com/tensorflow/models/tree/master/research/audioset VGGish的目的是对音频数据进行分类。

VGGish将一批梅尔频谱图(基本上是图片)作为输入,每个频谱图表示1秒,并返回一批形状为(batch size, 128)的嵌入。因此,要处理一个10秒长的音频文件,请先将其转换为一批10 mel频谱图,然后得到形状为(10, 128)的输出。

现在,我想在VGGish之上添加一个分类器,这意味着添加层。由于形状(10, 128)是一个时间序列,因此我想在第一维上进行卷积或使用LSTM进行调整。

问题在于嵌入物的形状由(batch size, units=128)确定。

简而言之,您输入了n秒的批处理。我想做的是能够输入10秒的n个文件批次,并在文件级别而不是第二级别工作。

这真的让我头疼。

VGGish的开头是这样的:

input_shape = (vggish_params.NUM_FRAMES,vggish_params.NUM_BANDS)

img_input = Input( shape=input_shape)
reshaped = Reshape((vggish_params.NUM_FRAMES,vggish_params.NUM_BANDS,1))(img_input)
# Block 1
x = Conv2D(64, (3, 3), activation='relu', padding='same', name='conv1')(reshaped)
x = MaxPooling2D((2, 2), strides=(2, 2), name='pool1')(x)

“重塑”图层可用于转换2D。嵌入的输出层如下所示:

x = Dense(128, activation='relu', name='fc2')(x)

我总体上想做的就是添加一个维度。我的意思是输入n秒的音频剪辑,而不是n个1秒的剪辑。

我真的不知道如何做到这一点,我也不知道是否有可能。我来这里寻求帮助,因为我真的很困惑。

有什么主意吗? 干杯。

0 个答案:

没有答案