Keras文档说它返回“大量的预测”。
在4类496个图像示例上使用它,我得到了一个4维数组
(496、4、4、512)。其他2个维度是多少?
最终,我希望有一个X数组(示例)和一个Y数组(标签)。
img_width, img_height = 150, 150
top_model_weights_path = 'bottleneck_fc_model.h5'
train_data_dir = 'data/train'
validation_data_dir = 'data/validation'
nb_train_samples = 496
nb_validation_samples = 213
epochs = 50
batch_size = 16
number_of_classes = 3
datagen = ImageDataGenerator(rescale=1. / 255)
# build the VGG16 network (exclude last layer)
model = applications.VGG16(include_top=False, weights='imagenet')
# generate training data from image files
train_generator = datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical',
shuffle=False)
# predict bottleneck features on training data
bottleneck_features_train = model.predict_generator(
train_generator, nb_train_samples // batch_size)
print(bottleneck_features_train.shape)
train_data = np.load(open('bottleneck_features_train.npy', 'rb'))
print(train_data.shape)
最佳答案
您正在做的是从要提供给模型的图像中提取瓶颈特征。
您获得的形状(496、4、4、512)为(n_samples,feature_height,feature_width,feature:channels)
您通过传递了模型的密集层
include_top=False
以图形方式说明,您通过此模型传递了样本
,最后4层不包含。 (您有不同的高度和宽度,因为凝视的图像是150x150,而不是标准VGG16中的224x224)
您获得的不是类别的预测,而是图像重要特征的综合表示。
为了获得您似乎需要的内容,您可以像这样修改代码
model = applications.VGG16(include_top=False, weights='imagenet')
for layer in model.layers:
layer.trainable = False
model = Dense(512, activation='relu')(model) #512 is a parameter you can tweak, the higher, the more complex the model
model = Dense(number_of_classes, activation='softmax')(model)
现在,您将在用于训练模型的样本上调用model.fit(X,Y),将其作为X表示496个样本图像,将Y表示为您准备的地面真相标签。
训练后,您可以使用model.predict预测您需要的类(class)。
关于python - Keras:predict_generator的输出是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43460568/