训练我的模型时出现内存错误:无法为形状为 (3094, 720, 1280, 3) 且数据类型为 float32 的数组分配 31.9 GiB
Memory error while training my model: Unable to allocate 31.9 GiB for an array with shape (3094, 720, 1280, 3) and data type float32
所以,我根据人的存在为我的图像提供“0”和“1”标签。当我传递所有图像并尝试训练我的模型时。我收到内存错误。
import warnings
warnings.filterwarnings('ignore')
import tensorflow as to
import tensorflow.keras
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.callbacks import ReduceLROnPlateau, CSVLogger, EarlyStopping
from tensorflow.keras.models import Model
from tensorflow.keras.layers import GlobalAveragePooling2D, Dense
from tensorflow.keras.applications.resnet50 import ResNet50
from PIL import Image
import os
import numpy as np
train_x=[]
train_y=[]
for path in os.listdir('C:\Users\maini_\Desktop\TestAndTrain\in\train'):
img = Image.open('C:\Users\maini_\Desktop\TestAndTrain\in\train\'+path)
train_x.append(np.array(img))
train_y.append(1)
img.close()
for path in os.listdir('C:\Users\maini_\Desktop\TestAndTrain\notin\train'):
img = Image.open('C:\Users\maini_\Desktop\TestAndTrain\notin\train\'+path)
train_x.append(np.array(img))
train_y.append(0)
img.close()
print("done" )
train_x = np.array(train_x)
train_x = train_x.astype(np.float32)
train_x /= 255.0
train_y = np.array(train_y)
我正在与
合作
- Jupyter notebook version:6.0.3
- python版本:3.7
- 蟒蛇版本:4.8.3
您已尝试将 3094
个大小 720x1280
的图像作为 单个批次 传递到您的模型中,结果总共 31.9GB 的数据。您的 GPU 过载,无法一次物理存储和处理所有数据,您需要使用批处理。
因为你每次尝试处理数据时都会运行遇到麻烦,我建议使用ImageDataGenerator()
和flow_from_directory()
,它们会自动加载图片进行训练。
理想的设置方法如下
train_datagen = ImageDataGenerator(
rescale=1./255,
validation_split=0.3) #Splits the data 70/30 for training and validation
train_generator = train_datagen.flow_from_directory(
train_data_dir,
color_mode='grayscale',
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical',
shuffle=True,
subset='training')
validation_generator = train_datagen.flow_from_directory(
train_data_dir,
color_mode='grayscale',
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical',
shuffle=True,
subset='validation')
然后要拟合模型,您需要调用 model.fit_generator()
class
model.fit_generator(train_generator, epochs=epochs, callbacks=callbacks, validation_data=validation_generator)
这是在 Keras 中训练模型时处理大量图像的最佳方式,因为数据是每批次从目录生成(或流动)的,而不是在 Python 中手动加载等等。唯一需要注意的是目录设置与您当前拥有的略有不同。您需要将目录设置更改为
TestAndTrain
-Train
-in
-notin
-Test
-in
-notin
所以,我根据人的存在为我的图像提供“0”和“1”标签。当我传递所有图像并尝试训练我的模型时。我收到内存错误。
import warnings
warnings.filterwarnings('ignore')
import tensorflow as to
import tensorflow.keras
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.callbacks import ReduceLROnPlateau, CSVLogger, EarlyStopping
from tensorflow.keras.models import Model
from tensorflow.keras.layers import GlobalAveragePooling2D, Dense
from tensorflow.keras.applications.resnet50 import ResNet50
from PIL import Image
import os
import numpy as np
train_x=[]
train_y=[]
for path in os.listdir('C:\Users\maini_\Desktop\TestAndTrain\in\train'):
img = Image.open('C:\Users\maini_\Desktop\TestAndTrain\in\train\'+path)
train_x.append(np.array(img))
train_y.append(1)
img.close()
for path in os.listdir('C:\Users\maini_\Desktop\TestAndTrain\notin\train'):
img = Image.open('C:\Users\maini_\Desktop\TestAndTrain\notin\train\'+path)
train_x.append(np.array(img))
train_y.append(0)
img.close()
print("done" )
train_x = np.array(train_x)
train_x = train_x.astype(np.float32)
train_x /= 255.0
train_y = np.array(train_y)
我正在与
合作- Jupyter notebook version:6.0.3
- python版本:3.7
- 蟒蛇版本:4.8.3
您已尝试将 3094
个大小 720x1280
的图像作为 单个批次 传递到您的模型中,结果总共 31.9GB 的数据。您的 GPU 过载,无法一次物理存储和处理所有数据,您需要使用批处理。
因为你每次尝试处理数据时都会运行遇到麻烦,我建议使用ImageDataGenerator()
和flow_from_directory()
,它们会自动加载图片进行训练。
理想的设置方法如下
train_datagen = ImageDataGenerator(
rescale=1./255,
validation_split=0.3) #Splits the data 70/30 for training and validation
train_generator = train_datagen.flow_from_directory(
train_data_dir,
color_mode='grayscale',
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical',
shuffle=True,
subset='training')
validation_generator = train_datagen.flow_from_directory(
train_data_dir,
color_mode='grayscale',
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical',
shuffle=True,
subset='validation')
然后要拟合模型,您需要调用 model.fit_generator()
class
model.fit_generator(train_generator, epochs=epochs, callbacks=callbacks, validation_data=validation_generator)
这是在 Keras 中训练模型时处理大量图像的最佳方式,因为数据是每批次从目录生成(或流动)的,而不是在 Python 中手动加载等等。唯一需要注意的是目录设置与您当前拥有的略有不同。您需要将目录设置更改为
TestAndTrain
-Train
-in
-notin
-Test
-in
-notin