我们可以在 keras 中创建递归模型吗?

Can we create a recursive model in keras?

我有模型要在 keras 中制作。一个模型的输出必须作为其他模型的输入。

输入 -> 说一批 64 X 64 图像 第一个模型输出 -> 三个输出,将 batch 的一些输入图像拆分为 32 X 32、64 X 32 和 64 X 16。

这些不同大小的图像中的每一个都将输入到三个不同的模型中,这些模型将进一步拆分它们。这将以递归方式继续六次。

查看图片以更好地理解:Click to see image

有6个阶段,每个阶段有3个来自父模型的选择。 这样就形成了模型的三叉树结构 每个模型都有自己的损失和优化器。

如何在训练过程中实现这样的模型?我们应该使用递归吗?在keras中以这种方式进行模型训练是否允许递归?

sizes/number 会在训练期间改变吗?或者你会定义设置并保持这样吗?如果您始终保持相同,但只是更改它以测试不同的模型设置,您可以轻松创建一个生成模型树的函数。例如

def create_model(tree_depth):
    models = []
    for i in range(tree_depth):
        model = ... # might be nice to have a function for defining a single model
        models.append(model)
    top_level_inputs = tf.keras.layers.Input((64, 64))
    x = model[0](top_level_inputs) # using functional model format here
    # if you want different parts of the input to go to different models, you may struggle.
    # Look into strided_slice if necessary
    for mod in models:
        x = mod(x) # you will need to code the true tree structure here, rather than this one-level for loop
    total_model = tf.keras.models.Model(top_level_inputs, x)
    return total_model

my_model = create_model(my_depth)

最大的挑战是如果你没有让每一层都获得相同大小的输入,那么自动化形状,并制作某种嵌套的 for 循环来处理 recursions/splitting。