我正在尝试训练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秒的剪辑。
我真的不知道如何做到这一点,我也不知道是否有可能。我来这里寻求帮助,因为我真的很困惑。
有什么主意吗? 干杯。