如何避免在Keras Lambda层中使用变量?

如何避免在Keras Lambda层中使用变量?,keras,lambda,Keras,Lambda,在我的模型训练计划中,我有这个片段 if args.thr > 0.0: s = layers.Lambda(lambda a: a / args.thr)(s) s = layers.Lambda(lambda a: a / (1.0+a*a))(s) u = layers.Subtract()([x, s]) args.thr值由argparse设置。我有一个单独的程序加载模型,并在一组图像上使用它。如本文所述,如果args.thr大于零,则将包括Lambda

在我的模型训练计划中,我有这个片段

if args.thr > 0.0:
    s = layers.Lambda(lambda a: a / args.thr)(s)
    s = layers.Lambda(lambda a: a / (1.0+a*a))(s)
    u = layers.Subtract()([x, s])
args.thr值由argparse设置。我有一个单独的程序加载模型,并在一组图像上使用它。如本文所述,如果args.thr大于零,则将包括Lambda层,并且它将期望args.thr的值

我可以编辑代码并将值写入Lambda行,而不是将其作为参数传递。在辩论中有没有有效的方法来做同样的事情?这很有效

    s = eval('layers.Lambda(lambda a: a / {0:f})(s)'.format(args.thr))
它不是很漂亮:我把浮点数变成了一个字符串,然后字符串又变成了浮点数,呃。有更好的方法吗

附言:


如果没有支持,也许我不应该这么做。在这种情况下,层没有可训练的参数,因此它不是模型的活动部分。我已经设法重新安排了事情,所以这是在模型之外处理的。尽管如此,它仍然有效,尽管它并不完美。

如果没有lambda,可以定义一个函数,而不是使用带有参数A和thr的lambda表达式。之后,您应该能够将
functools.partial(您的函数,thr=args.thr)
传递到
keras.layers.Lambda
。谢谢。这就行了。答案不是在克拉斯或努比。我可能会坚持使用我所拥有的,因为值是我输入的参数,所以将其转换为字符串并返回不会造成真正的伤害。这是包装函数的一种方法。我希望能把变量包装成常量,这样我就能明白为什么找不到它了。谢谢