Как предварительно обработать огромный набор данных и сохранить его так, чтобы я мог тренировать данные в Python - PullRequest
0 голосов
/ 03 марта 2019

Я хочу предварительно обработать огромный набор данных (600 КБ) изображений, которые будут использоваться для обучения модели.Тем не менее, это занимает слишком много памяти, и я искал решения, но не один подходил моей проблеме здесь.Вот часть моего кода.Я все еще плохо знаком с глубоким изучением, и я думаю, что плохо справился с предварительной обработкой данных.Если кто-нибудь знает, как решить эту проблему с памятью, он будет очень признателен.

# Read the CSV File
data_frame = pd.read_csv("D:\\Downloads\\ndsc-beginner\\train.csv")

#Load the image
def load_image(img_path, target_size=(256, 256)):
    #Check if the img_path has .jpg behind the name
    if img_path[-4:] != '.jpg':
        # Load the image
        img = load_img(img_path+'.jpg',
                       target_size=target_size, grayscale=True)
    else:
        #Load the image
        img = load_img(img_path, target_size=target_size, grayscale=True)
    # Convert to a numpy array
    return img_to_array(img) 


IMG_SIZE = 256
image_arr = []
# Get the category column values
category_id = data_frame['Category']
# Change the category to one-hot - has 50 categories
dummy_cat_id = keras.utils.np_utils.to_categorical(category_id, 50)
# Get the image paths column values
path_list = data_frame.iloc[1:, -1]
# Batch generator
def batch_gen(data, batch_size):
    for i in range(0, len(data), batch_size):
        yield data[i:i+batch_size]
# Append the numpy array(img) and category label into an array.
def extract_data(data_frame):
    total_count = len(path_list)
    batch_size = 1000
    index = 0
    for path in batch_gen(path_list,batch_size):
        for mini_path in path:
            image_arr.append([load_image(mini_path), dummy_cat_id[index]])
            print(index)
            index+= 1

#extract_data(data_frame)
random.shuffle(image_arr)


# Features and Labels for training data
trainImages = np.array([i[0] for i in image_arr]
                      ).reshape(-1, IMG_SIZE, IMG_SIZE, 1)
trainLabels = np.array([i[1] for i in image_arr])

trainImages = trainImages.astype('float32')
trainImages /= 255.0

1 Ответ

0 голосов
/ 04 марта 2019

Я вижу, что при предварительной обработке вы просто делаете изображения в градациях серого и нормализуете их.Если вы используете Keras, вы можете использовать следующее, которое нормализует и преобразует ваши изображения в оттенки серого. Убедитесь, что вы указали путь, содержащий папки классов, в которых находятся изображения.Вы можете изменить режим класса на категориальный, если хотите

train_datagen = ImageDataGenerator(rescale=1./255)
train_gen = train_datagen.flow_from_directory(
        f'{readPath}/training/',
        target_size=(100,100),
        color_mode='grayscale',
        batch_size=32,
        classes=['cat','dog'],
        class_mode='binary'
    )

Для обучения вы можете использовать функцию model.fit_generator ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...