Keras Forext_Generator выводит различное количество образцов - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь улучшить производительность модели трансферного обучения, которая использует Xception в качестве предварительно обученной модели, используя увеличение данных.Цель состоит в том, чтобы классифицировать породы собак.train_tensors и valid_tensors содержат обучающий и тестовый образы соответственно в массиве numpy.

from keras.applications.xception import Xception 

model = Xception(include_top = False, weights = "imagenet")


datagen = ImageDataGenerator(zoom_range=0.2, 
                             horizontal_flip=True, 
                             width_shift_range = 0.2, 
                             height_shift_range = 0.2,
                             fill_mode = 'nearest',
                             rotation_range = 45)
batch_size = 32

bottleneck_train = model.predict_generator(datagen.flow(train_tensors, 
                                                        train_targets, 
                                                        batch_size = batch_size), 
                                          train_tensors.shape[0]// batch_size)

bottleneck_valid = model.predict_generator(datagen.flow(valid_tensors, 
                                                        valid_targets, 
                                                        batch_size = batch_size), 
                                           test_tensors.shape[0]//batch_size)



print(train_tensors.shape)
print(bottleneck_train.shape)

print(valid_tensors.shape)
print(bottleneck_valid.shape)

Однако выходные данные из последних 4 строк:

(6680, 224, 224, 3)
(6656, 7, 7, 2048)
(835, 224, 224, 3)
(832, 7, 7, 2048)

Предикат_генератораФункция возвращает количество сэмплов, отличных от того, что было ей предоставлено.Образцы пропускаются или не учитываются?

1 Ответ

0 голосов
/ 29 декабря 2018

Да, некоторые образцы не учитываются, потому что 6680 и 835 не делят точно на 32 (размер партии), вы можете настроить размер партии так, чтобы она точно разделяла оба числа.

ИлиВы можете просто настроить код для включения одного дополнительного пакета (который будет иметь немного меньший размер) с помощью функции math.ceil python:

import math
bottleneck_train = model.predict_generator(datagen.flow(train_tensors, 
                                                    train_targets, 
                                                    batch_size = batch_size), 
                                      math.ceil(train_tensors.shape[0] / batch_size))

bottleneck_valid = model.predict_generator(datagen.flow(valid_tensors, 
                                                    valid_targets, 
                                                    batch_size = batch_size), 
                                       math.ceil(test_tensors.shape[0] /batch_size))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...