深度神经网络的图像输入

假设你有一个存储数据集的文件夹(包含大量图像)。你希望将这些图像输入到深度神经网络中进行训练(我目前使用Tensorflow)。

首先想到的解决方案(非常初级且不雅的解决方案)是将图像存储在一个数组中。对于小数据集来说这是可以的,但当数据集很大且图片很大时,这不是一个可行的解决方案,因为我们将没有足够的内存。

解决方案是分批读取数据。

我正在尝试实现这一点。我感兴趣的数据集是cultech的Caltech-UCSD Birds 200。这个数据集提供了一个文本文件,每行包含每张图像的路径。这简化了事情。我的解决方案(我正在尝试实现的)是定义一个类。模板是这样的:

class Dataset :           属性 :                   images_paths                  labels                   current_batch_index                  batch_size                  classes_names          方法 :                   get_next_batch()                   shuffle()                  normalize()

一旦我实例化这个类的对象,所有图像的路径就会存储在images_paths变量中,真实标签(one_hot_encoded)存储在labels中。get_next_batch()方法将使用current_batch_index返回一个数组,我们使用路径存储实际的图像。数组的大小是batch_size,从images_path和labels读取的索引是(current_batch_index, current_batch_index+batch_size)。(我使用scipy.misc.imread读取图像,并使用scipy.misc.reshape将它们调整为固定形状(200×200)。)

这样,我将只在内存中存储一个批次,并在训练循环中使用它来输入网络。

问题:你觉得这个怎么样?你通常如何将图像输入到网络中?有相关的工具吗?有用于分割数据集的工具吗?

供参考:我使用的是Python和Tensorflow。也希望了解这些问题的C++答案。

谢谢,抱歉这篇文章有点长


回答:

Tensorflow允许按需从磁盘读取数据,并具有预先缓冲数据以减少延迟的方法(例如,当批次3通过网络运行时,批次4在内存中,而批次5正在加载到批次2之前所在的内存中)。查看tf.data库。cifar10示例做了类似你所问的事情,但cifar10格式有些奇怪,需要进行一些调整。

有没有更好的例子?

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注