Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 我如何在不耗尽内存的情况下,在Tensorflow中对大量图像进行CNN培训?_Python_Image_Tensorflow_Cnn - Fatal编程技术网

Python 我如何在不耗尽内存的情况下,在Tensorflow中对大量图像进行CNN培训?

Python 我如何在不耗尽内存的情况下,在Tensorflow中对大量图像进行CNN培训?,python,image,tensorflow,cnn,Python,Image,Tensorflow,Cnn,我正在尝试使用CNN对一些图像数据进行分类。我有38000张不同大小的图片(比如400x400像素左右)。我最初只使用图像的一个子集,并使用OpenCV将它们加载到列表中,但现在我尝试使用所有图像,我的RAM用完了。在培训过程中处理大量数据的正确方法是什么?我可以批量加载和培训这些数据吗?如果是,怎么做 我在一个Python Jupyter笔记本电脑中工作。你必须成批地训练数据,从硬盘加载数据。使用tf.data.Dataset库自动执行此操作,请检查:对于大型数据集,必须将数据分批读取到模型中

我正在尝试使用CNN对一些图像数据进行分类。我有38000张不同大小的图片(比如400x400像素左右)。我最初只使用图像的一个子集,并使用OpenCV将它们加载到列表中,但现在我尝试使用所有图像,我的RAM用完了。在培训过程中处理大量数据的正确方法是什么?我可以批量加载和培训这些数据吗?如果是,怎么做


我在一个Python Jupyter笔记本电脑中工作。

你必须成批地训练数据,从硬盘加载数据。使用tf.data.Dataset库自动执行此操作,请检查:

对于大型数据集,必须将数据分批读取到模型中,而不是尝试一次加载所有数据,因为这将导致OOM(内存不足)错误。由于您正在处理图像,我建议使用ImageDataGenerator().flow\u from\u directory()。文档位于[此处][1]。要使用它,您需要将图像排列到目录和子目录中。例如,假设您有一个狗图像和猫图像的数据集,并且您希望构建一个分类器来预测图像是狗还是猫。因此,创建一个 一个叫train的目录。在train目录中创建一个子目录cats和一个子目录dogs。将猫的图像放在猫的目录中,将狗的图像放在狗的目录中。我通常也会将一些图像用于测试,所以我还创建了一个名为test的目录。在其中创建两个子目录猫和狗,它们的名字与火车目录中的名字相同。将测试图像放在dog和cat目录中。然后使用下面的代码加载数据

train_dir=r'c:\train'
test_dir=r'c:\test'
img_height=400
imh_width=400
batch_size=32
epochs=20
train_gen=ImageDataGenerator(rescale=1/255, validation_split=.2)
                                     .flow_from_directory( train_dir,
                                      target_size=(img_height, img_width),                                                                              
                                      batch_size=batch_size, seed=123,                                                                               
                                      class_mode='categorical',subset='training' 
                                      shuffle=True)
valid_gen= ImageDataGenerator(rescale=1/255, validation_split=.2)
                                     .flow_from_directory( train_dir,
                                      target_size=(img_height, img_width),                                                                              
                                      batch_size=batch_size, seed=123,                                                                               
                                      class_mode='categorical',subset='validation' 
                                      shuffle=False)
test_gen=ImageDataGenerator(rescale=1/255).flow_from_directory(test_dir,
                                          target_size=(img_height, img_width),                                                                              
                                          batch_size=batch_size,
                                          class_mode='categorical', 
                                          shuffle=False) 
然后构建并编译您的模型。使用损失作为分类熵。然后拟合模型

history=model.fit(x=train_gen,  epochs=epochs, verbose=1, validation_data=valid_gen)
此设置用于创建验证数据,以便您可以在培训中监控模型性能。培训完成后,您可以使用在测试集上测试模型

accuracy=model.evaluate( test_gen, batch_size=batch_size, verbose=1, steps=None)[1]*100
print ('Model accuracy on the test set is ' accuracy)

  [1]: https://keras.io/api/preprocessing/image/