J'ai essayé le Tutoriel officiel de TensorFlow
mnist_softmax Un programme qui estime les caractères manuscrits 60000 données d'entraînement 10000 données de test L'entrée est des données d'image 784 (28 * 28)
Entrer X lignes 784 colonnes 1 Poids Ligne W Numéro de données d'entraînement Colonne 784 Biais b ligne 10 colonnes 1 y = softmax (W ・ x + b)
Multiplication matricielle matmul()
Pour exprimer l'établissement Le résultat de la classification est obtenu en fonction des données d'entrée Fonction d'activation avec la somme de toutes les sorties de 1 y1, y2 ... y10 (représentant la probabilité des nombres 0-9, respectivement)
La bonne réponse est représentée par 0 et 1
Trouvez le poids (w) et la polarisation (b) afin que les données d'étiquette et la sortie de softmax soient aussi proches que possible.
En tant que fonction de coût (erreur) Calculez l'écart entre la valeur estimée et l'étiquette de réponse correcte
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
import tensorflow as tf
Préparez un conteneur vide avec placeholder
Variable variable
x = tf.placeholder(tf.float32, [None,784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
La sortie est de 10 éléments, pour un total de 1.
y = tf.nn.softmax(tf.matmul(x,W) + b)
Calculez la distance entre la différence entre y
et y_
dans cross_entropy
reduction_mean
(moyenne)
réduire la somme
(total)
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
Optimiser et mettre à jour les pondérations
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
Entraînez-vous avec des données aléatoires pour 100 lots. Répétez 1000 fois.
Extraire 100 données dans le train.
sess.run(train_step, feed_dict={x: batch_xs, y_:batch_ys})
train_step
Spécifié par SGD (méthode de descente de gradient)
feed_dict = {x: batch_xs, y_: batch_ys}
Source des données, x est x du lot, y est y du lot
for _ in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_:batch_ys})
ʻEqualCompare la sortie avec l'étiquette correcte et renvoie Vrai et Faux. ʻArgmax (y, 1)
Extrait le plus grand élément de sortie.
reduction_mean
Précision moyenne
cast
Vrai, Convertir False en nombre (ratio)
Enfin évaluer avec des données de test
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_ : mnist.test.labels}))
Enfin, un résumé du flux jusqu'à présent est décrit.
mnist_softmax.py
# coding: utf-8
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
import tensorflow as tf
x = tf.placeholder(tf.float32, [None,784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x,W) + b)
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
for _ in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_:batch_ys})
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_ : mnist.test.labels}))
Recommended Posts