Ich studiere gerade Deep Learning auf Udacity.Wie tune L2 Regularisierung
Ich erfolgreich gebaut und trainieren ein neuronales Netzwerk mit einer versteckten Schicht und ich habe eine 93% ige Genauigkeit mit Testdaten. Als ich jedoch die L2-Regularisierung in mein Modell einführte. Die Genauigkeit sinkt auf 89%. Ist das etwas falsch mit meiner Regularisierung?
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)
Das richtige Maß an Regulierung sollte die Validierung/Testgenauigkeit verbessern.
Aber wenn ich die beta
zu 0,001 ändere, bekam ich eine Genauigkeit von 93,7%. Also, sollte ich beta
als tf.Variable
definieren, um sich selbst abzustimmen?