Tensorflow:重量衰减与logits标准化

时间:2016-09-01 19:48:58

标签: machine-learning tensorflow

我正在开发类似cifar10示例中的类似架构的CNN。我的CNN由两个卷积层组成,每个卷层后面跟着一个最大池层和三个完全连接的层。除最后一个之外的所有图层都使用relu激活函数。最终层产生订单10^5的对数,因此运行softmax函数会导致单热编码。我试图以两种不同的方式解决这个问题。

首先,我只是将日志重新调整为[-1, 1],即将其标准化。这似乎解决了问题,训练顺利,CNN产生了合理的结果。但我不确定这是否是正确的方法,感觉规范化logits是一种解决方案,无法解决最初的问题。 enter image description here

其次,我应用了体重衰减。如果没有logits归一化,则交叉熵从较大的值开始,但随着总重量的减少,它会稳定下降。然而,准确性会产生奇怪的模式。此外,训练有重量衰减的网络产生比具有logits标准化的网络更糟糕的结果。 enter image description here

重量衰减如下:

def weight_decay(var, wd):
    weight_decay = tf.mul(tf.nn.l2_loss(var), wd, name='weight_loss')
    tf.add_to_collection('weight_losses', weight_decay)

精度

predictions = tf.nn.softmax(logits)
one_hot_pred = tf.argmax(predictions, 1)
correct_pred = tf.equal(one_hot_pred, tf.argmax(y, 1))
accuracy_batch = tf.reduce_mean(tf.cast(correct_pred, tf.float32))

那么如何解决大规模logits的问题呢?什么是最佳做法?应用体重衰减会产生更糟糕结果的原因是什么?

1 个答案:

答案 0 :(得分:-1)

我认为tf.nn.l2_loss(var)未被规范化,换句话说,您的wd太大,或者不适合。