【发布时间】:2018-08-02 19:00:37
【问题描述】:
假设您有一个数据集所在的文件夹(很多图像)。 您想将这些图像提供给深度神经网络进行训练(对我来说,我现在使用 Tensorflow)。
想到的第一个解决方案(非常不优雅和初学者的解决方案)是将图像存储在一个数组中。这对于一个小数据集来说是可以的,但是当数据集很大并且图片很大时,这不是一个可行的解决方案,因为我们没有足够的内存。
解决方法是批量读取数据。
我正在尝试实现这一点。我感兴趣的数据集是 cultech 的 Caltech-UCSD Birds 200。该数据集提供了一个文本文件,其中每行包含每个图像的路径。 这有利于事情。 我的解决方案(我正在尝试实现)是定义一个类。模板是:
class Dataset :
attributes :
images_paths
labels
current_batch_index
batch_size
classes_names
methodes :
get_next_batch()
shuffle()
normalize()
一旦我实例化了这个类的一个对象,所有图像的路径都存储在变量 images_paths 中,ground_truth 标签存储在标签中 (one_hot_encoded)。 get_next_batch() 方法将使用 current_batch_index 返回一个数组,我们使用路径存储实际图像。数组的大小是 batch_size,从 images_path 和 labes 读取的索引是 (current_batch_index,current_batch_index+batch_size)。 (我使用 scipy.misc.imread 读取图像并将它们重塑为固定形状( 200x200 )使用 scipy.misc.reshape )。
这样我将使用该对象在内存中仅存储一个批次,并在训练循环中使用它来将其提供给网络。
问题:您对此有何看法?您如何正常将图像输入网络?有工具吗?有没有工具可以分割你的数据集?
F.Y.I:我正在使用 python 和 tensorflow。知道 C++ 的这些问题的答案也会很有趣。
谢谢你,很抱歉发了这么长的帖子
【问题讨论】:
标签: tensorflow machine-learning deep-learning