为什么Python eval为Keras正则化器返回相同的对象?

为什么Python eval为Keras正则化器返回相同的对象?,python,tensorflow,keras,eval,Python,Tensorflow,Keras,Eval,我试图将字符串(从JSON读取)转换为Keras层可以使用的参数。但是,当我发现eval函数创建的所有正则化器对象都是相同的 a = eval('l1(0.1)') b = eval('l2(0.1)') c = eval('l1_l2(0.1)') print(a,b,c) 给出: <tensorflow.python.keras.regularizers.L1L2 object at 0x0000013F003C2F60> <tensorflow.python.keras

我试图将字符串(从JSON读取)转换为Keras层可以使用的参数。但是,当我发现eval函数创建的所有正则化器对象都是相同的

a = eval('l1(0.1)')
b = eval('l2(0.1)')
c = eval('l1_l2(0.1)')
print(a,b,c)
给出:

<tensorflow.python.keras.regularizers.L1L2 object at 0x0000013F003C2F60>
<tensorflow.python.keras.regularizers.L1L2 object at 0x0000013F003C2D68> 
<tensorflow.python.keras.regularizers.L1L2 object at 0x0000013F0032F160>

eval('l1(0.1)'不应该给出



任何关于为什么会发生这种情况的想法都将不胜感激。

L1L2
同时存储
l1
l2
;在正则化器上,运行,例如:

print(model.layers[1].内核正则化器.\uuuu dict\uuuu)
#{'l1':数组(0,dtype=float32),'l2':数组(1,dtype=float32)}
要访问其中一个,请执行以下操作:

print(model.layers[1].kernel_regularizer.l1)#0.0
打印(model.layers[1].kernel_regularizer.l2)#1.0
在您的代码中,
a
设置
l1
b
设置
l2
,以及
c
同时设置这两个属性。
完整示例脚本:

从keras.layers导入输入,密集
从keras.regularizers导入l2
从keras.models导入模型
ipt=输入(形状=(100,4))
x=稠密(10,激活=relu',核正则化子=l2(1))(ipt)
out=密集型(1,激活='sigmoid')(x)
模型=模型(ipt,out)
compile(优化器='adam',loss='binary\u crossentropy')
打印(model.layers[1]。内核\u正则化器。\u dict\u)
打印(model.layers[1].kernel\u regularizer.l1)
打印(model.layers[1].kernel\u regularizer.l2)

感谢您的详细解释。我想我现在明白了。
<function tensorflow.python.keras.regularizers.l1(l=0.01)>