【问题标题】:predict_generator and class labelspredict_generator 和类标签
【发布时间】:2018-05-29 13:25:24
【问题描述】:

我正在使用 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 中的瓶颈层提取的特征中获得所需的类标签。

应该是training_generator.py第422行的代码

x, _ = generator_output 

做这样的事情

 => x, y = generator_output

并从 predict_generator 返回元组 [np.concatenate(out) for out in all_outs],y

即返回相应的类标签以及预测的特征all_outs,因为如果不运行两次生成器就无法获得相应的标签。

【问题讨论】:

    标签: python keras


    【解决方案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]
    
            #...
    

    【讨论】:

    • 谢谢。如果我们迭代两次没有图像,那么它将为目录的每个图像创建两个采样图像。
    • 会的。但是,如果您不使用任何类型的增强,为什么不在开始使用瓶颈时直接使用epochs=more_epochs
    • 关于换档的另一个问题。为什么 tx 与高度一起工作。 tx = np.random.uniform(-hrg, hrg) * h ty = np.random.uniform(-wrg, wrg) * w
    猜你喜欢
    • 2017-12-11
    • 2016-08-08
    • 1970-01-01
    • 2013-06-02
    • 2018-12-31
    • 2020-02-20
    • 2012-06-21
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多