我们可以在 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。
我有模型要在 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。