当前位置: 首页 > 面试题库 >

从CSV加载图像和注释,并将fit_generator与多输出模型一起使用

裴展
2023-03-14
问题内容

在问题#10120之后,我正在使用Keras功能API构建具有多个(五个)输出和相同输入的模型,以便同时预测数据的不同属性(在我的情况下为图像)。数据集的所有元数据都存储在不同的CSV文件中(一个用于训练,一个用于验证,一个用于测试数据)。

我已经编写了解析CSV的代码,并将所有不同的注释保存到不同的numpy数组(x_train.npy,emotions.npy等)中,稍后我将加载它们以训练我的CNN。

我要提出的问题如下:

首先,保存已解析的注释以便随后加载它们的最有效方法是什么?

从CSV文件即时读取注释,而不是将其保存为numpy(或任何其他格式),是否更好?

当我加载保存的numpy数组时(以下示例仅包含图像和单个元数据)

 (x_train, y_train),(x_val, y_val)

那我做

train_generator = datagen.flow(x_train, y_train, batch_size=32)

最后,

history = model.fit_generator(train_generator,
                        epochs=nb_of_epochs,
                        steps_per_epoch= steps_per_epoch,
                        validation_data=val_generator,
                        validation_steps=validation_steps,
                        callbacks=callbacks_list)

我的程序似乎在整个训练过程中消耗了多达20-25GB的RAM(在GPU上完成)。万一我添加了多个输出,我的程序由于内存泄漏而崩溃(我拥有的最大RAM为32GB)。

将已解析的注释与原始图像一起加载的正确方法是什么?

假设上述问题已解决, 那么将ImageDataGenerator用于以下多个输出的正确方法什么 (也在此处讨论)

Keras:如何将fit_generator与不同类型的多个输出一起使用

Xi[0], [Yi1[1], Yi2[1],Yi3[1], Yi4[1],Yi5[1]]

问题答案:
def multi_output_generator(hdf5_file, nb_data, batch_size):
    """ Generates batches of tensor image data in form of ==> x, [y1, y2, y3, y4, y5] for use in a multi-output Keras model.

        # Arguments
            hdf5_file: the hdf5 file which contains the images and the annotations.
            nb_data: total number of samples saved in the array.
            batch_size: size of the batch to generate tensor image data for.

        # Returns
            A five-output generator.
    """

    batches_list = list(range(int(ceil(float(nb_data) / batch_size))))

    while True:

        # loop over batches
        for n, i in enumerate(batches_list):
            i_s = i * batch_size  # index of the first image in this batch
            i_e = min([(i + 1) * batch_size, nb_data])  # index of the last image in this batch

            x = hdf5_file["x_train"][i_s:i_e, ...]

            # read labels
            y1 = hdf5_file["y1"][i_s:i_e]
            y2 = hdf5_file["y2"][i_s:i_e]
            y3 = hdf5_file["y3"][i_s:i_e]
            y4 = hdf5_file["y4"][i_s:i_e]
            y5 = hdf5_file["y5"][i_s:i_e]

        yield x, [y1, y2, y3, y4 ,y5]


 类似资料:
  • 问题内容: 在具有功能API的Keras模型中,我需要调用fit_generator来使用ImageDataGenerator训练增强图像数据。问题是我的模型有两个输出:我要预测的掩码和一个二进制值,显然我只想增加输入和掩码输出,而不是二进制值。我该如何实现? 问题答案: 下面的示例可能是不言自明的!“虚拟”模型采用1个输入(图像),并输出2个值。该模型为每个输出计算MSE。 下面的函数生成批次以

  • 我使用AWS加密客户端。下面的代码抛出错误为 错误:@DoNotTouch不适用于现场 然而,如果我给出@DoNotTouch配置,如下所示[使用getter和setter] 这很好用。我猜lombok生成的getter和setter不会被AmazoneCryptionClient识别 我在跟踪这个aws doc:https://aws.amazon.com/blogs/developer/cli

  • 我可以使用注释将jdbi查询的结果映射到我感兴趣的bean,如下所示: 如果应用程序中使用的实例尚未注册到任何自定义映射器中,则此操作很好。 此映射器在应用程序开始时注册到实例,如下所示: 重写方法,并提供逻辑将任何类型的结果从数据库转换为相关的bean类型。正是这个uber转换器负责整个应用程序中所有DB到POJO的转换。 我的问题是:有没有一种方法可以告诉继续使用这个将结果从数据库转换为所有类

  • 问题内容: 我试图将Python 3程序反向移植到2.7,但遇到了一个奇怪的问题: 根据文档,返回Unicode文本的内存流。当我尝试手动输入Unicode字符串时,它可以正常工作。为什么即使所有写入的字符串都是Unicode字符串,它也无法与模块结合使用?在什么地方来,它使得异常? (我知道我可以代替使用,但是我想知道在这种情况下怎么了) 问题答案: Python 2.7模块不支持Unicode

  • 问题内容: 我正在尝试将包与我的sequelize模型一起使用,并试图遵循将散列合并到模型中的教程,但是在遇到错误。我似乎无法弄清楚这个问题。有没有更好的方法来合并bcrypt? 错误: 模型: 问题答案: 应在以下方法的“选项”自变量中提供方法

  • 我有非常具体的任务在Delphi2010与PDF。经过几天的斗争,我想请求你的帮助。 任务: 在表单上的嵌入式查看器组件中打开pdf 在文档上用鼠标定义矩形 从图像文件(BMP或PNG或JPG)中添加矩形标记注释。必须将图像拉伸到选定的区域。 null Acrobat可以显示PDF和注释,但有一种方法可以从图像文件中选择矩形和添加标记。 gnostice可以显示PDF,可以选择矩形但不能从图像文件

  • 我在我的应用程序中使用带有陶土的ehcache。当我使用带有陶土的ehcache时,我的响应时间增加了700倍。我认为陶土需要时间来测量物体的大小,因为它给了我警告: net.sf.ehcache.pool.sizeof。ObjectGraphWalker checkMaxDepth警告:在尝试计算对象图的大小时,已达到1000个对象引用的配置限制。如果继续调整大小操作,可能会出现严重的性能下降。