Hey, je suis nouveau dans tensorflow et même après beaucoup d’efforts, je n’ai pas pu ajouter Terme de régularisation L1 au terme erreur
x = tf.placeholder("float", [None, n_input])
# Weights and biases to hidden layer
ae_Wh1 = tf.Variable(tf.random_uniform((n_input, n_hidden1), -1.0 / math.sqrt(n_input), 1.0 / math.sqrt(n_input)))
ae_bh1 = tf.Variable(tf.zeros([n_hidden1]))
ae_h1 = tf.nn.tanh(tf.matmul(x,ae_Wh1) + ae_bh1)
ae_Wh2 = tf.Variable(tf.random_uniform((n_hidden1, n_hidden2), -1.0 / math.sqrt(n_hidden1), 1.0 / math.sqrt(n_hidden1)))
ae_bh2 = tf.Variable(tf.zeros([n_hidden2]))
ae_h2 = tf.nn.tanh(tf.matmul(ae_h1,ae_Wh2) + ae_bh2)
ae_Wh3 = tf.transpose(ae_Wh2)
ae_bh3 = tf.Variable(tf.zeros([n_hidden1]))
ae_h1_O = tf.nn.tanh(tf.matmul(ae_h2,ae_Wh3) + ae_bh3)
ae_Wh4 = tf.transpose(ae_Wh1)
ae_bh4 = tf.Variable(tf.zeros([n_input]))
ae_y_pred = tf.nn.tanh(tf.matmul(ae_h1_O,ae_Wh4) + ae_bh4)
ae_y_actual = tf.placeholder("float", [None,n_input])
meansq = tf.reduce_mean(tf.square(ae_y_actual - ae_y_pred))
train_step = tf.train.GradientDescentOptimizer(0.05).minimize(meansq)
après cela, je lance le graphique ci-dessus en utilisant
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
n_rounds = 100
batch_size = min(500, n_samp)
for i in range(100):
sample = np.random.randint(n_samp, size=batch_size)
batch_xs = input_data[sample][:]
batch_ys = output_data_ae[sample][:]
sess.run(train_step, feed_dict={x: batch_xs, ae_y_actual:batch_ys})
Ci-dessus est le code d'une couche autoencoder,} _ "meansq" est ma fonction de perte au carré. Comment puis-je ajouter une régularisation L1 pour la matrice de pondération (tenseurs) dans le réseau ?
Vous pouvez utiliser les méthodes apply_normalisation et l1_normizer de TensorFlow.
Un exemple basé sur votre question:
import tensorflow as tf
total_loss = meansq #or other loss calcuation
l1_regularizer = tf.contrib.layers.l1_regularizer(
scale=0.005, scope=None
)
weights = tf.trainable_variables() # all vars of your graph
regularization_penalty = tf.contrib.layers.apply_regularization(l1_regularizer, weights)
regularized_loss = total_loss + regularization_penalty # this loss needs to be minimized
train_step = tf.train.GradientDescentOptimizer(0.05).minimize(regularized_loss)
Remarque: weights
est une list
où chaque entrée est un tf.Variable
.
Vous pouvez également utiliser tf.slim.l1_regularizer () à partir du slim loss .