Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neural network tensorflow中LSTM的正则化_Neural Network_Tensorflow_Lstm_Recurrent Neural Network - Fatal编程技术网

Neural network tensorflow中LSTM的正则化

Neural network tensorflow中LSTM的正则化,neural-network,tensorflow,lstm,recurrent-neural-network,Neural Network,Tensorflow,Lstm,Recurrent Neural Network,Tensorflow提供了一个很好的LSTM包装器 rnn_cell.BasicLSTM(num_units, forget_bias=1.0, input_size=None, state_is_tuple=False, activation=tanh) 我想使用正则化,比如L2正则化。但是,我无法直接访问LSTM单元中使用的不同权重矩阵,因此无法显式执行以下操作 loss = something + beta * tf.reduce_sum(tf.nn.l2_loss

Tensorflow提供了一个很好的LSTM包装器

rnn_cell.BasicLSTM(num_units, forget_bias=1.0, input_size=None,
           state_is_tuple=False, activation=tanh)
我想使用正则化,比如L2正则化。但是,我无法直接访问LSTM单元中使用的不同权重矩阵,因此无法显式执行以下操作

loss = something + beta * tf.reduce_sum(tf.nn.l2_loss(weights))

是否有方法访问矩阵或在LSTM中以某种方式使用正则化?

提供了可用于添加L2正则化项的
变量
对象列表。请注意,这将为模型中的所有变量添加正则化。如果要将L2项仅限制为权重的子集,可以使用指定前缀命名变量,然后使用它从
tf返回的列表中筛选变量。可训练的_变量

Tensorflow具有一些内置和辅助函数,允许您将L2规范应用于模型,例如:

在训练步骤跑步中:

    outputs = session.run([self.updates, self.gradient_norms, self.losses], input_feed)

我喜欢做下面的事情,但我知道的唯一一件事是一些参数不喜欢用L2正则化,比如批处理范数参数和偏差。LSTM包含一个偏差张量(尽管在概念上它有许多偏差,但为了性能,它们似乎是连接在一起的),对于批量规范化,我在变量名称中添加了“noreg”以忽略它

loss = your regular output loss
l2 = lambda_l2_reg * sum(
    tf.nn.l2_loss(tf_var)
        for tf_var in tf.trainable_variables()
        if not ("noreg" in tf_var.name or "Bias" in tf_var.name)
)
loss += l2
其中
lambda_l2_reg
是小乘数,例如:
float(0.005)

做这个选择(这是循环中的完整
if
,在正则化中丢弃一些变量)曾经让我在测试代码的一次尝试中从0.879 F1分数跳到0.890,而无需重新调整配置的
lambda
,这包括了批量标准化和偏差的变化,我在神经网络中还有其他偏差

根据我们的研究,正则化循环权重可能有助于爆发梯度

此外,根据研究,如果您使用一些,则在堆叠的单元之间而不是单元内部使用辍学会更好

关于爆炸梯度问题,如果使用梯度剪裁时已添加L2正则化的损耗,则在剪裁过程中也会考虑该正则化



这里是我正在研究的神经网络:

我把整个过程作为你问题的答案。跳出
loss = your regular output loss
l2 = lambda_l2_reg * sum(
    tf.nn.l2_loss(tf_var)
        for tf_var in tf.trainable_variables()
        if not ("noreg" in tf_var.name or "Bias" in tf_var.name)
)
loss += l2