我有一个定制的正规化器,需要分析模型输出张量。基本上我不能这样说。
[ "Naturgræs", ... ]
自定义函数需要目标标签张量,遗憾的是这种张量尚未实现。
我也尝试设置这种图层的属性:
model = Sequential()
model.add(Dense(128, name="dense_1", W_regularizer=Custom(0.1)))
model.add(Dense(nb_classes, name='dense_2'))
model.compile(loss='mse', optimizer='adam')
model.fit(..)
当model.add(Dense(128, name="dense_1"))
model.get_layer('dense_1').W_regularizer = Custom(0.1)
这样的图层我看到它已经正确应用但在训练期间似乎不起作用。或许也许这种方式不是明智的实施方式。
答案 0 :(得分:0)
要更改此类内容,您需要重新编译模型。这是因为编译过程生成训练函数以便之后最小化。要更改训练功能,需要再次编译。
致电
model.compile(...)
在您进行更改后,它应该按照您期望的方式工作。
答案 1 :(得分:0)
感谢@Thomas,我尝试重新编译但没有按预期工作(如下所示)
我尝试了以下方法..
1)直接指定(工作)
#put inf number here for testing
x = Dense(128,name="dense_1", W_regularizer = l2(1E300))
model.add(x)
...
model.compile(...)
2)之后设置属性并编译(不工作)
x = Dense(128,name="dense_1")
model.add(x)
x.W_regularizer = l2(1E300)
...
model.compile(...)
3)在topology.layer中使用add_weight
(它可以工作)
x = Dense(128,name="dense_1")
model.add(x)
x.W = x.add_weight((x.input_dim, x.output_dim),
initializer='zero',
name='{}_W'.format(x.name),
constraint=x.W_constraint,
regularizer=l2(1E300))
model.compile(...)
for 1)3)我得到loss: nan
这意味着修改成功应用,3)是我想要的。而第二个不是。但必须有一种聪明的方法来实现。