Я работал над обучением модели keras из большого набора данных изображений с несколькими размерами меток около 4-5 ГБ, но программа, которую я написал, работает нормально для меньшего набора данных, но для большего набора данных у меня заканчиваетсяпамяти, поэтому мне нужно написать собственные генераторы, которые я попробовал и почти сделал, но я застрял с некоторым исключением во время обучения через мои генераторы данных, и исключение:
1/25 [> .............................] - ETA: 2:13 - потери: 1,0268 - в соответствии: 0,5038
2/25[=> ............................] - ETA: 1:07 - убыток: 1,0172 - согласно: 0,5086
3/25 [==> ...........................] - ETA: 46 с - потери: 0,9993 - в соотв. 0,5123
4/25 [===> ..........................] - ETA: 34 с - потери: 0,9795 - в соотв.: 0.5141
Traceback (последний вызов был последним): файл "/home/innovation/PycharmProjects/keras-multi-label/TestGen.py", строка 165, в эпохах = EPOCHS, подробный = 1) файл "/ главная / инновация / anaconda3 / envs / тс-ГП-cuda9 / Библиотека / python3.6 / site-packages / keras / legacy / interfaces.py ", строка 91, в файле возврата функции оболочки (* args, ** kwargs) Файл" / home / innovation / anaconda3 / envs / tf-gpu-cuda9 / lib /python3.6 / site-packages / keras / engine / training.py ", строка 1418, в fit_generator initial_epoch = initial_epoch) Файл" /home/innovation/anaconda3/envs/tf-gpu-cuda9/lib/python3.6/site-packages / keras / engine / training_generator.py ", строка 181, в fit_generator generator_output = next (output_generator) StopIteration
Я публикую здесь свой код, я был бы очень признателен, если кто-то может помочьисправить эту проблему
import json
from imutils import paths
import random
import cv2
from sklearn.model_selection import train_test_split
import numpy as np
import os
from sklearn.preprocessing import MultiLabelBinarizer
from keras.optimizers import Adam
from pyimagesearch.smallervggnet import SmallerVGGNet
from keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt
import pickle
# load the user configs
with open('conf/conf.json') as f:
config = json.load(f)
IMAGE_DIMS = (96, 96, 3)
EPOCHS = 75
INIT_LR = 1e-3
BS = 32
# config variables
dataset = config["dataset"]
model_path = config["model"]
labelbin = config["labelbin"]
plot = config["plot"]
test_image = config["test_image"]
print("[INFO] loading images...")
imagePaths = sorted(list(paths.list_images(dataset)))
random.seed(42)
random.shuffle(imagePaths)
labels = list(imagePath.split(os.path.sep)[-2].split("_") for imagePath in imagePaths)
images = (cv2.resize(cv2.imread(imagePath), (IMAGE_DIMS[1], IMAGE_DIMS[0])) for imagePath in imagePaths)
#construct the image generator for data augmentation
aug = ImageDataGenerator(rotation_range=25, width_shift_range=0.1,
height_shift_range=0.1, shear_range=0.2, zoom_range=0.2,
horizontal_flip=True, fill_mode="nearest")
# Data generator
def create_generator(images,labels,BS):
arr_images = []
slice_count = 0
count_remain = total_items
for (idx,image) in enumerate(images):
count = idx+1
if count % BS == 0:
arr_images.append(image)
_labels_chunk = labels[slice_count:count]
slice_count = count
count_remain = total_items - count
(trainX, testX, trainY, testY) = train_test_split(np.array(arr_images, dtype="float") / 255.0,_labels_chunk, test_size=0.2, random_state=42)
yield trainX, trainY
arr_images.clear()
else:
arr_images.append(image)
if count_remain == len(arr_images):
_labels_chunk = labels[slice_count:count]
(trainX, testX, trainY, testY) = train_test_split(np.array(arr_images, dtype="float") / 255.0,_labels_chunk, test_size=0.2, random_state=42)
yield trainX, trainY
arr_images.clear()
mlb = MultiLabelBinarizer()
labels = mlb.fit_transform(labels)
model = SmallerVGGNet.build(
width=IMAGE_DIMS[1], height=IMAGE_DIMS[0],
depth=IMAGE_DIMS[2], classes=len(mlb.classes_),
finalAct="sigmoid")
opt = Adam(lr=INIT_LR, decay=INIT_LR / EPOCHS)
model.compile(loss="binary_crossentropy", optimizer=opt,
metrics=["accuracy"])
print("[INFO] training network...",len(labels))
H = model.fit_generator(
create_generator(images,labels,500),
steps_per_epoch=25,
epochs=EPOCHS, verbose=1)
# save the model to disk
print("[INFO] serializing network...")
model.save(model_path)
Заранее спасибо