Я пытаюсь создать простой 5-классный объектный детектор, извлекая узкие места, используя предварительно обученный vgg16 (обученный в сети изображений).У меня есть 10000 изображений для обучения - 2000 для каждого класса и 2500 для тестирования - 500 для каждого класса.Однако, как только я извлекаю узкие места, тензор проверки имеет размер 2496, но ожидаемый размер должен быть 2500. Я проверил папку данных папки и обнаружил, что общее количество проверочных изображений составляет 2500. Но я все еще получаюошибка при попытке выполнить мой код.Ошибка говорит - «ValueError: Входные массивы должны иметь то же количество выборок, что и целевые массивы. Найдено 2496 входных выборок и 2500 целевых выборок» .Я приложил код ниже, кто-нибудь может заставить меня понять, почему число входных выборок уменьшается до 2496?
Я только что проверил количество изображений, присутствующих в поезде, и данные испытаний, чтобы быть уверенным, что нетизображения отсутствовали.Оказывается, ни одного изображения на самом деле не было.
Это код для получения возможностей узкого места.
global_start=dt.now()
#Dimensions of our flicker images is 256 X 256
img_width, img_height = 256, 256
#Declaration of parameters needed for training and validation
train_data_dir = 'data/train'
validation_data_dir = 'data/validation'
epochs = 50
batch_size = 16
#Get the bottleneck features by Weights.T * Xi
def save_bottlebeck_features():
datagen = ImageDataGenerator(rescale=1./255)
#Load the pre trained VGG16 model from Keras, we will initialize only the convolution layers and ignore the top layers.
model = applications.VGG16(include_top=False, weights='imagenet')
generator_tr = datagen.flow_from_directory(train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode=None, #class_mode=None means the generator won't load the class labels.
shuffle=False) #We won't shuffle the data, because we want the class labels to stay in order.
nb_train_samples = len(generator_tr.filenames) #10000. 2000 training samples for each class
bottleneck_features_train = model.predict_generator(generator_tr, nb_train_samples // batch_size)
np.save('weights/vgg16bottleneck_features_train.npy',bottleneck_features_train) #bottleneck_features_train is a numpy array
generator_ts = datagen.flow_from_directory(validation_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode=None,
shuffle=False)
nb_validation_samples = len(generator_ts.filenames) #2500. 500 training samples for each class
bottleneck_features_validation = model.predict_generator(generator_ts, nb_validation_samples // batch_size)
np.save('weights/vgg16bottleneck_features_validation.npy',bottleneck_features_validation)
print("Got the bottleneck features in time: ",dt.now()-global_start)
num_classes = len(generator_tr.class_indices)
return nb_train_samples,nb_validation_samples,num_classes,generator_tr,generator_ts
nb_train_samples,nb_validation_samples,num_classes,generator_tr,generator_ts=save_bottlebeck_features()
Это вывод приведенного выше фрагмента кода:
Found 10000 images belonging to 5 classes.
Found 2500 images belonging to 5 classes.
Got the bottleneck features in time: 1:56:44.166846
Теперь, если я это сделаю validation_data.shape
, я получаю (2496, 8, 8, 512), тогда как ожидаемый результат должен быть (2500, 8, 8, 512).Вывод train_data в порядке.Что может быть не так?Я новичок в отладке в Керасе, и я не могу понять, что именно вызывает эту проблему.
Любая помощь будет принята с благодарностью!