我正在使用TensorFlow制作神经网络。我现在想将自己的图像导入为数据集,以便在这些图像上训练神经网络。
为此,我首先得到一个文件名列表及其相应的标签。我使用以下代码执行此操作:
locations = {"chimpanzee":["G:\Profielwerkstuk\chimpanzee"],
"gorilla":["G:\Profielwerkstuk\gorilla"],
"howler monkey":["G:\Profielwerkstuk\howler_monkey"]}
files = []
labels = []
numberlabel = []
for label, folders in locations.items():
numberlabel.append(label)
filesperlabel = []
for folder in folders:
filesperlabel.extend([join(folder, f) for f in listdir(folder) if isfile(join(folder, f))])
print(len(filesperlabel))
files.extend(filesperlabel)
labels.extend([len(numberlabel) - 1] * len(filesperlabel))
locations
这里是一个字典,标签为键,文件夹为值。
这很好用:我得到一个文件位置列表,一个标签列表和一个列表,用于转换猴子类型的输出神经元数。
然后我尝试从这个TensorFlow数据集。我首先在TensorFlow常量中转换文件名和标签名列表:
filenames = tf.constant(files)
labelnames = tf.constant(labels)
我首先尝试了Tensorflow website上的代码。但是,我在解码图像后得到图像不包含任何形状的错误。如何正确导入图像?
此外,在制作数据集之后,我想分批循环遍历它。 MNIST数据集包含一个非常方便的功能,但是它也可以用于自定义数据集吗?搜索这些问题并没有给我很多有用的提示。
答案 0 :(得分:0)
对于导入:使用OpenCV导入图像
import opencv as cv
imgDataset = []
for i in range(len(files)):
imgDataset.append(cv2.imread(files[i]))
imgDataset = np.asarray(imgDataset)
你会得到一个numpy形状的数组(num_files,height,width,color_channels)
访问第i个图像应该是imgDataset [i]。
这里的问题可能是,如果您的数据集太大,您将在以后遇到问题将其提供给占位符。批量处理整个数据集可能很困难。
如果您遇到尺寸问题,请查看以下链接: https://stanford.edu/~shervine/blog/keras-how-to-generate-data-on-the-fly.html
这是批量处理数据集的一步。