之后设置Keras图层的属性

时间:2017-03-06 09:33:53

标签: python deep-learning keras regularized

我有一个定制的正规化器,需要分析模型输出张量。基本上我不能这样说。

[ "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) 这样的图层我看到它已经正确应用但在训练期间似乎不起作用。或许也许这种方式不是明智的实施方式。

2 个答案:

答案 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)是我想要的。而第二个不是。但必须有一种聪明的方法来实现。