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})

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

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

最佳答案

只计算一次 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 变量,因为这些变量不应被正则化。

关于python - TensorFlow:向 LSTM 添加正则化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41841050/

10-12 18:01