#python #machine-learning #keras #generator
#python #машинное обучение #keras #генератор
Вопрос:
Я работал над обучением модели keras из большого набора данных изображений с размером нескольких меток около 4-5 ГБ, но написанная мной программа отлично работает для меньшего набора данных, но для большего набора данных у меня заканчивается память, поэтому мне нужно написать пользовательские генераторы, которые я пробовал и почти закончил, но я застрял с некоторым исключением во время обучения с помощью моих генераторов данных, и исключение составляет:
1/25 [>………………………..] — ETA: 2:13 — потеря: 1.0268 — оценка: 0.5038
2/25 [=>……………………….] — ETA: 1:07 — потеря: 1.0172 — соответствие: 0.5086
3/25 [==>………………………] — ETA: 46s — потеря: 0.9993 — acc: 0.5123
4/25 [===>……………………..] — ETA: 34 секунды — потеря: 0.9795 — acc: 0.5141
Обратная трассировка (последний последний вызов): Файл «/home/innovation/PycharmProjects/keras-multi-label/TestGen.py», строка 165, в epochs=ЭПОХИ, подробный = 1) файл «/home/innovation/anaconda3/envs/tf-gpu-cuda9/lib/python3.6/site-packages/keras/legacy/interfaces.py», строка 91, в оболочке возвращает файл func(*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) остановка ввода
Я публикую здесь свой код, я был бы очень признателен, если кто-нибудь сможет помочь исправить эту проблему
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)
Заранее спасибо
Комментарии:
1. Здравствуйте, кто-нибудь может здесь помочь, пожалуйста…. Спасибо
2. Здравствуйте, эксперты, есть ли кто-нибудь, кто может мне здесь помочь. Я опубликовал этот пост около месяца назад, и я вижу, что никто еще не ответил на это. Я буду очень рад, если кто-нибудь сможет ответить.
3. Я здесь никого не поддержал по этому вопросу, я прошу, если у кого-то есть решение — пожалуйста, поделитесь. Спасибо
4. Эта проблема слишком сложна для нас : (