我正在使用ImageDataGenerator来生成新的增强图像并从预训练模型中提取瓶颈功能,但我在keras上看到的大部分教程 将相同数量的训练样本作为目录中的图像数量进行采样。
train_generator = train_datagen.flow_from_directory(
train_path,
target_size=image_size,
shuffle = "false",
class_mode='categorical',
batch_size=1)
bottleneck_features_train = model.predict_generator(
train_generator, 2* nb_train_samples // batch_size)
假设我想从上面的代码中获得2倍以上的图像,我如何获得从瓶颈层提取的特征的所需类标签,这些标签存储在元组 train_generator 中。
{422}中training_generator.py的代码
x, _ = generator_output
做这样的事情
=> x, y = generator_output
并从predict_generator
返回元组[np.concatenate(out) for out in all_outs],y
即返回相应的类标签以及预测的功能 all_outs ,因为在没有运行两次生成器的情况下无法获取相应的标签。
答案 0 :(得分:1)
如果您正在使用预测,通常您根本不需要Y,因为Y将是预测的结果。 (你不是在训练,所以你不需要真正的标签)
但你可以自己做:
bottleneck = []
labels = []
for i in range(2 * nb_train_samples // batch_size):
x, y = next(train_generator)
bottleneck.append(model.predict(x))
labels.append(y)
bottleneck = np.concatenate(bottleneck)
labels = np.concatenate(labels)
如果您希望它具有索引(如果您的生成器支持):
#...
for epoch in range(2):
for i in range(nb_train_samples // batch_size):
x,y = train_generator[i]
#...