合并两个训练过的网络进行序列推理



我正在尝试合并两个经过训练的神经网络。我有两个经过训练的Keras模型文件A和B。

模型A用于图像超分辨率,而模型B用于图像彩色化。

我正在尝试合并两个经过训练的网络,以便更快地推断SR+着色。(我不愿意用一个网络同时完成SR和着色任务。我需要用两个不同的网络来完成SR和彩色化任务。(

有关于如何合并两个Keras神经网络的提示吗?

只要网络a的输出形状与模型B的输入形状兼容,就有可能。

由于tf.keras.models.Model继承自tf.keras.layers.Layer,因此可以使用Model,就像创建keras模型时使用Layer一样。


一个简单的例子:

让我们首先创建两个简单的网络,A和B,约束条件是B的输入与A的输出具有相同的形状。

import tensorflow as tf 
A = tf.keras.models.Sequential(
[
tf.keras.Input((10,)),
tf.keras.layers.Dense(5, activation="tanh")
],
name="A"
)
B = tf.keras.models.Sequential(
[
tf.keras.Input((5,)),
tf.keras.layers.Dense(10, activation="tanh")
],
name="B"
)

然后,我们可以将这两个模型合并为一个模型,在这种情况下,使用功能性的API(使用Sequential API也是完全可能的(:

merged_input = tf.keras.Input((10,))
x = A(merged_input)
merged_output = B(x)
merged_model = tf.keras.Model(inputs=merged_input, outputs=merged_output, name="merged_AB")

导致以下网络:

>>> merged_model.summary()
Model: "merged_AB"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_3 (InputLayer)         [(None, 10)]              0         
_________________________________________________________________
A (Sequential)               (None, 5)                 55        
_________________________________________________________________
B (Sequential)               (None, 10)                60        
=================================================================
Total params: 115
Trainable params: 115
Non-trainable params: 0
_________________________________________________________________

相关内容

  • 没有找到相关文章

最新更新