【问题标题】:TensorFlow: adding regularization to LSTMTensorFlow:向 LSTM 添加正则化
【发布时间】:2017-01-24 23:52:15
【问题描述】:

在Tensorflow LSTM Regularization 之后,我正在尝试在训练 LSTM 单元的参数时将正则化项添加到成本函数中。

抛开一些我有的常数:

def RegularizationCost(trainable_variables):
    cost = 0
    for v in trainable_variables:
        cost += r(tf.reduce_sum(tf.pow(r(v.name),2)))
    return cost

...

regularization_cost = tf.placeholder(tf.float32, shape = ())
cost = tf.reduce_sum(tf.pow(pred - y, 2)) + regularization_cost
optimizer = tf.train.AdamOptimizer(learning_rate = 0.01).minimize(cost)

...

tv = tf.trainable_variables()
s = tf.Session()
r = s.run

...

while (...):
    ...

    reg_cost = RegularizationCost(tv)
    r(optimizer, feed_dict = {x: x_b, y: y_b, regularization_cost: reg_cost})

我遇到的问题是,添加正则化项会大大减慢学习过程,实际上,当与pred - y 相关的项几乎停滞不前时,正则化项reg_cost 会随着每次迭代而明显增加,即reg_cost 似乎没有被考虑在内。

我怀疑我以完全错误的方式添加了这个词。我不知道如何在成本函数本身中添加这个术语,所以我使用了标量 tf.placeholder 的解决方法,并“手动”计算了正则化成本。怎么做才合适?

【问题讨论】:

    标签: python machine-learning tensorflow


    【解决方案1】:

    只计算一次 L2 损失:

    tv = tf.trainable_variables()
    regularization_cost = tf.reduce_sum([ tf.nn.l2_loss(v) for v in tv ])
    cost = tf.reduce_sum(tf.pow(pred - y, 2)) + regularization_cost
    optimizer = tf.train.AdamOptimizer(learning_rate = 0.01).minimize(cost)
    

    您可能希望删除 bias 的变量,因为这些变量不应被正则化。

    【讨论】:

      【解决方案2】:

      它变慢了,因为您的代码在每次迭代中都会创建新节点。这不是您使用 TF 编码的方式。首先,您创建整个图,包括正则化项,然后,在 while 循环中您只执行它们,每个“tf.XXX”操作都会创建新节点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        • 2021-03-04
        • 2018-06-11
        • 2020-04-30
        • 2023-04-01
        • 1970-01-01
        相关资源
        最近更新 更多