我正在尝试实现我的VGG16模型,这是我的代码:
model_vgg = applications.VGG16(include_top=False, weights='imagenet')
train_generator_bottleneck = datagen.flow_from_directory(
train_data_dir,
target_size=(64,64),
batch_size=batch_size,
class_mode=None,
shuffle=False)
Found 9741 images belonging to 15 classes.
现在我正在提取我的功能并保存它们
bottleneck_features_train = model_vgg.predict_generator(train_generator_bottleneck, 19)
np.save(open(bottleneck_features_train.npy', 'wb'), bottleneck_features_train)
现在加载我的数据
train_data = np.load(open('bottleneck_features_train.npy', 'rb'))
train_labels = train_generator_bottleneck.classes
train_labels = to_categorical(train_labels, num_classes=15)
我在这里得到了错误的标签和数据形状
print train_data.shape
print train_labels.shape
输出:
(9728L, 2L, 2L, 512L)
(9741L, 15L)
为什么我得到错误的形状输出请帮忙?
答案 0 :(得分:0)
我不是100%肯定你在这里说“错误”是什么意思,但我会假设你希望train_data.shape
有9741个样本而不是9728。
原因来自predict_generator
的工作方式。您在此处指定了steps=19
的参数。这意味着您的模型将对19批输入数据进行预测。现在我假设你的train_generator_bottleneck
的batch_size为512,因此你得到19 * 512 = 9728个输出。
如果你想要9741输出,我会试试这个:
bottleneck_features_train = model_vgg.predict_generator(train_generator_bottleneck, 20)
bottleneck_features_train = bottleneck_features_train[:9741]
np.save(open(bottleneck_features_train.npy', 'wb'), bottleneck_features_train)
这会解决您的形状问题吗?