Julia'中的Keras W#u约束和W#u正则化类似物;s通量

Julia'中的Keras W#u约束和W#u正则化类似物;s通量,keras,julia,julia-flux,Keras,Julia,Julia Flux,我试图解析Kerasjson文件,在Julia中创建Flux模型(Kerasv1.1.0和Fluxv0.10.4) 密集层配置示例: { "class_name": "Dense", "config": { "W_constraint": null, "b_constraint": null, "name": "dense_1", "output_dim": 512, "activity_r

我试图解析
Keras
json文件,在Julia中创建
Flux
模型(
Keras
v1.1.0和
Flux
v0.10.4)

密集
层配置示例:

{
    "class_name": "Dense", 
    "config": {
        "W_constraint": null, 
        "b_constraint": null, 
        "name": "dense_1", 
        "output_dim": 512, 
        "activity_regularizer": null, 
        "trainable": true, 
        "init": "glorot_normal", 
        "bias": true, 
        "input_dtype": "float32", 
        "input_dim": 4096, 
        "b_regularizer": null, 
        "W_regularizer": {
            "l2": 0.0010000000474974513, 
            "name": "WeightRegularizer", 
            "l1": 0.0
        }, 
        "activation": "relu", 
        "batch_input_shape": [null, 4096]
    }
}
因此,我很清楚如何在
Flux
中定义输入/输出维度、激活函数和参数初始化。但是
W_约束
W_正则化器
呢?我在
Flux
density
层中没有发现任何类似的东西。它存在吗?我应该自己实施吗?
密集
层的这些参数是否非常重要,或者在创建
通量
模型时可以轻松跳过而不会严重改变性能?

是网络所有参数的总和,并添加到损耗函数中的规范;你必须“手动”完成,但这很容易,也很容易


KERA中的参数约束是通过使用投影方法实现的,投影方法是模型的一部分。这是不那么琐碎的实现,我建议阅读一点关于近梯度方法。您可能必须实现您自己的优化类型,以便在不断变化的过程中实现(理想情况下,包装一个现有的优化类型)。也许你可以做一些繁重的工作。另一方面,就我所见,带有参数约束的模型不太常见,你可能暂时不去实施它们。

我越是考虑正则化的实现,我就越感到困惑,因为我对Julia的工作原理的理解仍然非常有限。因此,我的模块将解析JSON并创建相应的流量模型。但是,如果损失不是模型的一部分,则会在外部创建,例如:
损失(x,y)=交叉熵(m(x,y)+和(范数,参数(m))
。我将以何种格式返回此
sum(norm,params(m))
以便将其添加到用户定义的损失中(在某些外部脚本中)?具体来说,如果我只是以某种方式计算
sum(norm,params(m))
它只需将模型的初始权重之和添加到损失函数中,而不是在训练过程中更改权重时实际重新计算该和。您可以创建一个从参数到正则化器的映射,然后在损失函数中求和;类似于
sum(reg[param].lambda*norm(param,reg[param].p)对于params(m)中的param
(但我实际上不知道通量…)。或者每个参数一个闭包:
sum(正则化器[param](param)对于params(m)中的param))