web-dev-qa-db-fra.com

Comment utiliser tf.reshape ()?

import tensorflow as tf    
import random    
import numpy as np    

x = tf.placeholder('float')   
x = tf.reshape(x, [-1,28,28,1])

with tf.Session() as sess:
    x1 = np.asarray([random.uniform(0,1) for i in range(784)])
    result = sess.run(x, feed_dict={x: x1})
    print(result)

J'ai eu quelques problèmes lors de l'utilisation des données mnistes lors du remodelage, mais cette question est une version simplifiée de mon problème ... Pourquoi ce code ne fonctionne-t-il pas réellement?

Ça montre

"ValueError: impossible de fournir la valeur de la forme (784,) pour le tenseur 'Reshape: 0', qui a la forme '(?, 28, 28, 1)'".

Comment pourrais-je le résoudre?

5
voice

Après avoir réaffecté, x est un tenseur de forme [-1,28,28,1] et comme le dit l'erreur, vous ne pouvez pas façonner (784,) à (?, 28, 28, 1). Vous pouvez utiliser un nom de variable différent:

import tensorflow as tf
import random
import numpy as np
x= tf.placeholder('float')
y=tf.reshape(x,[-1,28,28,1])
with tf.Session() as sess:
    x1 = np.asarray([random.uniform(0,1) for i in range(784)])
    result = sess.run(y, feed_dict={x: x1})
    print(result)
3
Dinesh

Conceptuellement Vous obtenez une erreur ici parce que lorsque vous utilisez sess.run(x, feed_dict{x:x1}). Cela tente d'alimenter et de remodeler la même variable. Cela crée un problème au moment de l'exécution. Ainsi, vous ne pouvez pas le faire en utilisant une seule variable.

import tensorflow as tf
import random
import numpy as np

x = tf.placeholder('float')
y = tf.reshape(x, [-1,28,28,1])

with tf.Session() as sess:
    x1 = np.asarray([random.uniform(0,1) for i in range(784)])
    result = sess.run(y, feed_dict={x: x1})
    print(result)

Dans tensorflow, les variables sont des espaces réservés. Ainsi, x contiendra des valeurs à virgule flottante, et une autre variable indiquera y contiendra des valeurs sous la forme [-1,28,28,1].

Si le même nom de variable est utilisé, il doit agir comme espace réservé pour deux choses. Ce n'est pas possible.

0
shantanu pathak