如何使用keras flow方法?

数据挖掘 数据集 喀拉斯 张量流 美国有线电视新闻网
2022-03-02 14:38:18

我正在用 Keras 构建一个卷积神经网络。我想使用我自己的数据集。该数据集由指定大小并用 0 填充的矩阵组成,其中包含指定大小并用 1 填充的子矩阵。子矩阵是可选的,目标是训练神经网络预测矩阵是否包含子矩阵。为了使其更难检测,我在矩阵中添加了各种类型的噪声。

这是矩阵的样子,黑色部分是 0,白色部分是 1。图像的像素与矩阵中的条目之间存在 1:1 的对应关系。 在此处输入图像描述

现在我想创建一个可以对这些图像进行分类的 CNN。到目前为止最简单的方法是使用

test_set = test_datagen.flow_from_directory('dataset/training_set',
                                            target_size = (imageSize, imageSize),
                                            batch_size = batchSize,
                                            class_mode = 'binary')

然后我training_set用 1000 张图像填充目录。这很好用,但有一个主要问题:

这确实效率低下,因为我首先创建图像,将它们保存在硬盘上,然后再次加载它们。这些是很多不必要的步骤,考虑到 keras 将图像转换回矩阵(或张量,idk),而我的图像最初是矩阵。

因此,我正在考虑通过将矩阵放入 keras 中.csv,甚至将matrixgenerator.py列表或数组直接“输入”到 keras 中来提高效率。我做了一些研究,发现了 Keras 的方法,它将输入矩阵指定为参数。

不幸的是,这是我卡住的地方。我不明白如何将我的矩阵变成 keras 想要的形式。我也不知道矩阵和标签需要能够使用流动方法的确切形状。

如果有人可以向我解释如何使用 flow 方法/告诉我在哪里可以找到更多关于它的信息,或者给我一个更好的选择来将我的数据集输入到 keras CNN,那将真的很有帮助。感谢您的帮助。只要我理解它,我也可以使用较低级别的 tensorflow 实现。

1个回答

假设您已经将图像数据调整大小和其他预处理为多维 numpy 数组,并将数据拆分为训练和测试。

使用 flow() 方法。您首先要使用 ImageDataGenerator() 创建一个生成器。下面的例子不做图像增强。它只会提供训练集中的图像。我添加了 rescale 参数以防万一没有标准化像素数据。

然后将训练数据传递给生成器的 fit() 方法 (datagen.fit())。

datagen = ImageDataGenerator(rescale=1./255) 
datagen.fit(x_train)

现在,您可以使用模型的 fit_generator() 方法训练模型。

model.fit_generator(datagen.flow(x_train, y_train, batch_size=batchSize),
                    steps_per_epoch=len(x_train) / batchSize, epochs=epochs)

您可以通过手动方式执行此操作:

for epoch in range(epochs):
    for x_batch, y_batch in datagen.flow(x_train, y_train, batch_size=batchSize):
        model.fit(x_batch, y_batch)

这是相应 Keras 文档的链接:https ://keras.io/preprocessing/image/