我试图在Keras(Lambda图层)中动态创建图层,但是由于某种原因,与手动将元素手动添加到列表中相比,当我使用for循环时,列表中出现了相同的错误。
我的错误在哪里?
other_channels_out = []
out_channel = []
for i in range(out_number_model_0):
layer = Lambda(lambda xx: K.expand_dims(xx))(Lambda(lambda y: y[:, i])(model_0.output))
if i != channel:
other_channels_out.append(layer)
else:
out_channel.append(layer)
VS
other_channels_out.append(Lambda(lambda xx: K.expand_dims(xx))(Lambda(lambda y: y[:, 0])(model_0.output)))
other_channels_out.append(Lambda(lambda xx: K.expand_dims(xx))(Lambda(lambda y: y[:, 1])(model_0.output)))
out_channel.append(Lambda(lambda xx: K.expand_dims(xx))(Lambda(lambda y: y[:, 2])(model_0.output)))
列表包括:[a,a,a,a]与[a,b,c,d]
答案 0 :(得分:0)
使函数生成图层似乎可以解决该问题。 但是我想解释一下吗?
other_channels_out = []
out_channel = []
def createLambda(i,input):
_layer = Lambda(lambda xx: K.expand_dims(xx))(Lambda(lambda y: y[:, i])(input))
return _layer
for i in range(out_number_model_0):
if i != channel:
other_channels_out.append(createLambda(i, model_0.output))
else:
out_channel.append(createLambda(i, model_0.output))
答案 1 :(得分:0)
我没有足够的声誉来发表评论,但问题是 i
的范围在 lambda
函数之外,因此 i
的值在 {{ 1}} 已创建。通过将 lambda
(以及 Lambda
)的创建移至另一个函数,您重新定义了 lambda
的范围。