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)
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
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
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser TensorFlow de apply_regularization et l1_regularizer méthodes.
Un exemple basé sur votre question:
Remarque:
weights
est unlist
où chaque entrée est untf.Variable
.il le devrait. tf.trainable_variables() renvoie une liste de variables, de sorte que vous pouvez parcourir pour voir si la variable est réellement là. (voir tensorflow.org/programmers_guide/variables)
La raison pour laquelle je demande, c'est que, habituellement, de ne pas régulariser, comme vous le voyez dans de nombreux articles, il suffit de poids est ce qui est régularisé.
C'est une bonne remarque, merci. Les préjugés ne sont généralement pas régularisés. Aussi, souvent, vous ne faites pas la régularisation L1 pour tous vos poids du graphique - l'extrait de code ci-dessus devrait se contenter de démontrer le principe d'utilisation d'une régulariser.
OriginalL'auteur bruThaler
Vous pouvez également utiliser tf.slim.l1_regularizer() de la slim pertes.
OriginalL'auteur PhillyAI