Keras自定义层问题循环

时间:2019-11-20 23:59:59

标签: python tensorflow keras

我试图在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]

2 个答案:

答案 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 的范围。

相关:Scope of lambda functions and their parameters?