【问题标题】:Training different outputs at different epochs在不同时期训练不同的输出
【发布时间】:2020-02-06 05:00:26
【问题描述】:

在 Keras 中,多输出训练中的每个或部分输出的训练是否可以从不同的时期开始?例如,其中一个输出将其他一些输出作为其输入。但是一开始的这些输出还为时过早,给模型带来了巨大的计算负担。我希望将其训练推迟到一段时间后的输出是一个自定义层,它必须对其输入应用一些图像处理操作,该输入是由另一个输出生成的图像,但一开始生成的图像毫无意义,我认为第一个时代应用这个自定义层只是浪费时间。有没有办法做到这一点?就像我们对每个输出的损失都有权重一样,我们是否有不同的起点来计算每个输出的损失?

【问题讨论】:

    标签: python tensorflow keras epoch multipleoutputs


    【解决方案1】:
    1. 构建一个不包含后续输出的模型。
    2. 将该模型训练到您想要的程度。
    3. 构建一个将旧模型合并到其中的新模型。
    4. 使用所需的新损失函数编译新模型。
    5. 训练该模型。

    详细说明第 3 步:Keras 模型可以像 Keras 的功能 API 中的层一样使用。

    你可以像这样构建一个正常的模型:

    input = Input((100,))
    x = Dense(50)(input)
    x = Dense(1, activation='sigmoid')(x)
    model = Model(input, x)
    

    但是,如果您有另一个标准 Keras 模型,则可以像使用任何其他层一样使用它。例如,如果我们有一个名为model1 的模型(使用Sequential()Model()keras.models.load_model() 创建),我们可以这样放入:

    input = Input((100,))
    x = model1(input)
    x = Dense(1, activation='sigmoid')(x)
    model = Model(input, x)
    

    这相当于将model1 中的每一层单独放入。

    【讨论】:

    • 我想过使用没有最后输出的训练模型的权重,并在新模型中使用它们。你是这个意思吗?或者我加载该模型并将其连接到最后一层的输入?谢谢!
    • @Hamed 加载模型并将其连接到您想要的任何输出/输入。查看我的编辑。
    猜你喜欢
    • 2015-11-29
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 2022-06-30
    • 2018-06-07
    相关资源
    最近更新 更多