在不同时期训练不同的输出

Posted

技术标签:

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

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

【问题讨论】:

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

详细说明第 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 加载模型并将其连接到您想要的任何输出/输入。查看我的编辑。

以上是关于在不同时期训练不同的输出的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Keras 中训练网络以适应不同的输出大小

如何修改我的T-SQL查询,以便输出基于2个不同时期出现两次或更多次的所有记录?

组合两个预训练模型的输出(在不同数据集上训练)并使用某种形式的二元分类器来预测图像

Keras:如何“合并”两个不同神经网络的输出来训练解码器?

保存不同时期的 model.fit 历史

在 keras 的输出阶段组合多个预训练模型