Comment exactement ajouter L1 régularisation de tensorflow de la fonction d'erreur

Hey je suis nouvelle tensorflow et même après beaucoup d'efforts n'ont pas pu ajouter
L1 régularisation terme pour le terme d'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 ce que j'ai exécuter le graphique ci-dessus, à l'aide de

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 pour un 4 couche autoencoder, "meansq" est mon carré de la perte de fonction. Comment puis-je ajouter de la L1 reguarisation pour la matrice de poids (tenseurs) dans le réseau?

L1 peut être mis en œuvre avec la somme et l'abs opérateurs, à la fois de ceux qui existent dans tensorflow (y compris leurs gradients)
0.001*tf.reduce_sum(tf.abs(parameters)) vous donne la norme L1 de votre paramètre vecteur (qui pourrait techniquement être un tenseur de rang supérieur dans ce cas) , afin de sanctionner votre apprentissage par l'
Merci beaucoup +de yaroslav. Donc, pour mon cas, il devrait être comme (?) meansq = tf.reduce_mean(tf.carré(ae_y_actual - ae_y_pred)) + 0.001*tf.reduce_sum(tf.abs(ae_Wh1)) + 0.001*tf.reduce_sum(tf.abs(ae_Wh1)) Suis-je la corriger?
Salut @Abhishek je me demandais si votre mise en œuvre de la l_1 regularizer travaillé et si elle est dérivable en tensorFlow. C'est le droit? Merci

OriginalL'auteur Abhishek | 2016-04-19