gpt4 book ai didi

machine-learning - 如何调整 L2 正则化

转载 作者:行者123 更新时间:2023-11-30 09:00:14 25 4
gpt4 key购买 nike

我正在学习Deep Learning关于Udactity。

我成功构建并训练了一个具有一个隐藏层的神经网络,并且测试数据的准确率达到了 93%。然而,当我将 L2 正则化引入我的模型时。准确率下降至 89%。我的正则化有问题吗?

beta = 0.01

n_hidden_layer = 1024
n_input = 784 # 28* 28
n_classes = 10

# Variables
weights = {
'h1': tf.Variable(tf.truncated_normal([n_input, n_hidden_layer], stddev=0.1)),
'out': tf.Variable(tf.truncated_normal([n_hidden_layer, n_classes], stddev=0.1))
}
biases = {
'b1': tf.Variable(tf.constant(0.1, shape=[n_hidden_layer])),
'out': tf.Variable(tf.constant(0.1, shape=[n_classes]))
}

def multilayer_perceptron(x, weights, biases):
# Hidden layer with RELU activation
layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
layer_1 = tf.nn.relu(layer_1)
# Output layer with linear activation
out_layer = tf.matmul(layer_1, weights['out']) + biases['out']
return out_layer

# Construct model
pred = multilayer_perceptron(x, weights, biases)
valid_pred = multilayer_perceptron(tf_valid_dataset, weights, biases)
test_pred = multilayer_perceptron(tf_test_dataset, weights, biases)

# Define loss and optimizer
# L' = L + Beta * (0.5 * ||w||^2)
l2 = beta * tf.nn.l2_loss(weights['h1']) + beta * tf.nn.l2_loss(weights['out'])
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=pred) + l2)
optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss)

The right amount of regularization should improve your validation / test accuracy.

但是当我将 beta 更改为 0.001 时,我得到了 93.7% 的准确率。那么,我应该将 beta 定义为 tf.Variable 来调整自身吗?

最佳答案

要理解为什么 beta 变量,你必须理解 L2 正则化的作用:它惩罚大权重!它应该惩罚这些权重多少取决于应用程序。有些应用需要比其他应用更大的权重。

beta 变量是您必须“手动”设置的参数。它不应该作为 tf.Variable 添加。然而,您可以做的是创建一个快速的超参数搜索,在其中迭代多个 beta 值以选择最佳的一个!尝试绘制几个值的损失以确定哪个值最好!

如果您还有其他问题,请告诉我!

关于machine-learning - 如何调整 L2 正则化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42896001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com