在不同时期训练不同的输出
Training different outputs at different epochs
在Keras中是否有可能在多输出训练中对每个或部分输出的训练从不同的epoch开始?例如,其中一个输出将其他一些输出作为其输入。但是一开始的那些输出还为时过早,给模型带来了巨大的计算负担。我希望将其训练推迟到一段时间后的这个输出是一个自定义层,它必须对其输入应用一些图像处理操作,这是由另一个输出生成的图像,但在开始时生成的图像是毫无意义的,我认为第一个时代应用这个自定义层只是浪费时间。有没有办法做到这一点?就像我们对每个输出的损失都有权重一样,我们计算每个输出的损失是否有不同的起点?
- 建立一个不包含后面输出的模型。
- 将该模型训练到您想要的程度。
- 构建一个将旧模型合并到其中的新模型。
- 使用您想要的新损失函数编译新模型。
- 训练该模型。
详细说明第 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
。
在Keras中是否有可能在多输出训练中对每个或部分输出的训练从不同的epoch开始?例如,其中一个输出将其他一些输出作为其输入。但是一开始的那些输出还为时过早,给模型带来了巨大的计算负担。我希望将其训练推迟到一段时间后的这个输出是一个自定义层,它必须对其输入应用一些图像处理操作,这是由另一个输出生成的图像,但在开始时生成的图像是毫无意义的,我认为第一个时代应用这个自定义层只是浪费时间。有没有办法做到这一点?就像我们对每个输出的损失都有权重一样,我们计算每个输出的损失是否有不同的起点?
- 建立一个不包含后面输出的模型。
- 将该模型训练到您想要的程度。
- 构建一个将旧模型合并到其中的新模型。
- 使用您想要的新损失函数编译新模型。
- 训练该模型。
详细说明第 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
。