Je suis en train d'apprendre TensorFLow. Donc, pour comprendre comment créer quelque chose, j'ai essayé de copier du code d'une source et de l'exécuter. Mais je frappe un message d'erreur. J'ai donc essayé une solution de ce site mais cela ne fonctionne pas (j'ai gardé mon test dans les commentaires).
"""programme 1 """
import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
X = tf.placeholder(tf.float32,[None, 28, 28, 1]) #28 * 28 taille image 1 = 1pixel car noir et blanc "X" valeur
W = tf.Variable(tf.zeros([784, 10])) # 28*28 = 784 , 10 -> 0 à 9 "W" = weight = poid
b = tf.Variable(tf.zeros([10])) #chiffre de 0 à 9 a reconnaitre "b" = constante
init = tf.initialize_all_variables()
#model
Y = tf.nn.softmax(tf.matmul(tf.reshape(X,[-1, 784]), W) + b) #fonction "matmul": produit matriciel "-1": reussite obligatoire
#Place holder
Y_ = tf.placeholder(tf.float32, [None, 10])
#loss function
cross_entropy = -1 * tf.reduce_sum(Y_ * tf.log(Y)) #formule
# % of correct annwer found in batch
is_correct = tf.equal(tf.argmax(Y,1),tf.argmax(Y_,1))
accuracy = tf.reduce_mean(tf.cast(is_correct,tf.float32))
#training step
optimizer = tf.train.GradientDescentOptimizer(0.003) #petit pas
train_step = optimizer.minimize(cross_entropy)
sess = tf.Session()
sess.run(init)
for i in range(10000):
#load batch of image and ocrrects answer
batch_X, batch_Y = mnist.train.next_batch(100)
batch_X = np.reshape(batch_X, (-1, 784))
#batch_Y = np.reshape(batch_Y, (-1, 784))
train_data = {X: batch_X, Y_: batch_Y}
#train
sess.run(train_step, feed_dict=train_data)
a,c = sess.run([accuracy,cross_entropy],feed = train_data)
test_data = {X:mnist.test.images, Y_:mnist.test.labels}
a,c = sess.run([accuracy,cross_entropy],feed = test_data)
le journal :
Traceback (most recent call last):
File "d:\tensorflow\test1.py", line 46, in <module>
sess.run(train_step, feed_dict=train_data)
File "C:\Users\Proprietaire\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\client\session.py", line 895, in run
run_metadata_ptr)
File "C:\Users\Proprietaire\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\client\session.py", line 1100, in _run
% (np_val.shape, subfeed_t.name, str(subfeed_t.get_shape())))
ValueError: Cannot feed value of shape (100, 784) for Tensor 'Placeholder:0', which has shape '(?, 28, 28, 1)'
2017-08-30 19:07:37.406994: W C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\35\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
la ligne 46 est
sess.run(train_step, feed_dict=train_data)
Que puis-je faire pour résoudre cette erreur?
Vous obtenez cette erreur car il y a un décalage entre la forme de ce que vous alimentez et ce que TensorFlow attend. Pour résoudre le problème, vous pouvez redéfinir vos données à l'aide de placeholder:0
, qui est batch_X
en (?, 28, 28, 1)
. Par exemple, vous feriez ce qui suit:
batch_X = np.reshape(batch_X, (-1, 28, 28, 1))
Vous devez remodeler X.
X = tf.placeholder(tf.float32 , [None ,28 , 28 , 1])
X = tf.reshape(X , [-1 , 784])