Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras批量加载声音实例_Python_Keras - Fatal编程技术网

Python Keras批量加载声音实例

Python Keras批量加载声音实例,python,keras,Python,Keras,我需要帮助,试图找出如何使用Keras实现批量加载 到目前为止,我正在尝试与Keras CNN合作制作歌曲分类器。我已经建立了以下10种类型分类的模型 model = Sequential() model.add(Conv1D(16, 5, padding="same", input_shape=(1, 661500))) model.add(Activation("relu")) model.add(MaxPool1D(pool_size=2, padding="same")) model

我需要帮助,试图找出如何使用Keras实现批量加载

到目前为止,我正在尝试与Keras CNN合作制作歌曲分类器。我已经建立了以下10种类型分类的模型

model = Sequential()

model.add(Conv1D(16, 5, padding="same", input_shape=(1, 661500)))
model.add(Activation("relu"))
model.add(MaxPool1D(pool_size=2, padding="same"))

model.add(Conv1D(16, 5, padding="same"))
model.add(Activation("relu"))
model.add(MaxPool1D(pool_size=2, padding="same"))

model.add(Conv1D(16, 5, padding="same"))
model.add(Activation("relu"))
model.add(MaxPool1D(pool_size=2, padding="same"))

model.add(Flatten())
model.add(Dense(128))
model.add(Activation("relu"))
model.add(Dense(10))
model.add(Activation("softmax"))

model.compile(optimizer="adam",
              loss="categorical_crossentropy",
              metrics=["accuracy"])
当我自己加载实例和标签时,它可以工作,但我的计算机无法一次处理1000首歌曲。我尝试使用ImageDataGenerator从目录中使用flow\批量加载它们。代码如下:

generator = ImageDataGenerator()
train_generator = generator.flow_from_directory("train",
                                                target_size=(1, 661500),
                                                batch_size=64,
                                                class_mode="categorical")
test_generator = generator.flow_from_directory("test",
                                               target_size=(1, 661500),
                                               batch_size=64,
                                               class_mode="categorical")

model.fit_generator(train_generator,
                    steps_per_epoch=5584,
                    epochs=10,
                    validation_data=test_generator,
                    validation_steps=1861)
我遇到了音频文件不是图像的问题,所以我在中的白名单文件格式中添加了.wav

\keras\Lib\site-packages\keras\preprocessing\image.py
这让Keras可以找到音频图像,但它无法真正打开它们。我改变了用枕头打开它们的位置,但它给出了更多的错误。我不认为我可以全部改变它们,所以我想知道是否有一种方法可以实现批量加载

编辑:我找到了Keras,我实现了一个Keras,如下所示

class MySequence(Sequence):

    def __init__(self, x_files, y_files, batch_size):
        self.x, self.y = x_files, y_files
        self.batch_size = batch_size

    def __len__(self):
        from numpy import ceil
        return int(ceil(len(self.x) / float(self.batch_size)))

    def __getitem__(self, idx):
        from librosa import load
        from numpy import array, expand_dims
        batch_x = self.x[idx * self.batch_size:(idx + 1) * self.batch_size]
        batch_y = self.y[idx * self.batch_size:(idx + 1) * self.batch_size]

        return expand_dims(array([load(file_name)[0] for file_name in batch_x]), axis=1), array(batch_y)
这一次火车的时间长得可笑。以前,10个纪元在3小时内完成,但现在一个纪元需要14小时。我能做些什么来缩短火车时间吗


编辑2:更改了fit_generator函数中的steps_per_epoch参数,它已降至可接受的水平。

这里的问题似乎是IO。也许可以用pickle之类的东西序列化数据,看看培训是否会更快


每个历元的步长只需减少历元中的步长。因此,您的训练不会更快,只是没有在每个历元中使用所有数据。

我假设每个历元的步长应该是样本计数/批量大小。当我训练将所有数据加载到RAM并使用fit函数时,训练进度将写入批次大小/样本计数[=============>…]。你能解释一下为什么在使用序列训练和常规训练时会有所不同吗?如何使用序列实现正常的训练过程。我从未使用过每个历元的步长,但使用序列时,模型函数不知道批大小。它只是从序列中接收数据,所以它无法判断第一个维度是bathc_大小还是其他。因此,它计算调用/序列的数量。\uuuu len\uuuuu(不是100%确定)。条形图之外的数字与使用普通拟合函数不同,但这在训练中不会有任何区别。根据我所能理解的,步长是序列的多少倍。uuu getitem_uuuuuuuuu被称为批大小*步长每历元=样本计数,好像我将其保留为默认值,keras将其设置为该值。谢谢你的帮助。