unhashable type: 'numpy.ndarray " erreur dans le tensorflow
data = pd.read_excel("/Users/madhavthaker/Downloads/Reduced_Car_Data.xlsx")
train = np.random.rand(len(data)) < 0.8
data_train = data[train]
data_test = data[~train]
x_train = data_train.ix[:,0:3].values
y_train = data_train.ix[:,-1].values
x_test = data_test.ix[:,0:3].values
y_test = data_test.ix[:,-1].values
y_label = tf.placeholder(shape=[None,1], dtype=tf.float32, name='y_label')
x = tf.placeholder(shape=[None,3], dtype=tf.float32, name='x')
W = tf.Variable(tf.random_normal([3,1]), name='weights')
b = tf.Variable(tf.random_normal([1]), name='bias')
y = tf.matmul(x,W) + b
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
summary_op = tf.summary.merge_all()
#Fit all training data
for epoch in range(1000):
sess.run(train, feed_dict={x: x_train, y_label: y_train})
# Display logs per epoch step
if (epoch+1) % display_step == 0:
c = sess.run(loss, feed_dict={x: x_train, y_label:y_train})
print("Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(c), \
"W=", sess.run(W), "b=", sess.run(b))
print("Optimization Finished!")
training_cost = sess.run(loss, feed_dict={x: x_train, y_label: y_train})
print("Training cost=", training_cost, "W=", sess.run(W), "b=", sess.run(b), '\n')
Voici l'erreur:
x---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-37-50102cbac823> in <module>()
6 #Fit all training data
7 for epoch in range(1000):
----> 8 sess.run(train, feed_dict={x: x_train, y_label: y_train})
9
10 # Display logs per epoch step
TypeError: unhashable type: 'numpy.ndarray'
Ici sont les formes que sur les deux tableaux numpy que je suis saisie:
y_train.shape = (78,)
x_train.shape = (78, 3)
Je n'ai aucune idée de ce qui est à l'origine. Tous mes formes correspondent et que je ne devrais pas avoir de problèmes. Laissez-moi savoir si vous avez besoin de plus d'informations.
Edit: De mon commentaire sur l'une des réponses ci-dessous, il semble que j'ai eu de spécifier une taille spécifique pour la mon des espaces réservés. None
n'était pas satisfaisante. Quand j'ai changé, et re-couru mon code, tout a bien fonctionné. Pas encore tout à fait sûr pourquoi.
- Quelles sont
x
ety_label
? Êtes-vous sûr qu'ils sont valides dict clés? - S'il vous plaît poster complète des messages d'erreur que vous voyez.
- fait.
Vous devez vous connecter pour publier un commentaire.
Dans mon cas, le problème a été de nommer le paramètre d'entrée le même que l'espace réservé variable. Ceci, bien sûr, remplace votre tensorflow variable avec la variable d'entrée; résultant d'une clé différente pour les feed_dict.
Un tensorflow variable est hashable, mais votre paramètre d'entrée (np.ndarray) ne l'est pas. Le unhashable erreur est donc un résultat de-vous essayer de passer votre paramètre comme la clé au lieu d'un tensorflow variable. Un peu de code pour visualiser ce que je suis en train de dire:
Espérant que cela aide quelqu'un tomber sur ce problème à l'avenir!
Veuillez bien vérifier le type de données que vous nourrissez "x_train/y_train" et le tenseur "x/y_label" vous défini par 'tf.espace réservé(...)'
J'ai rencontré le même problème avec vous. Et la raison en est x_train dans mon code est "np.float64", mais ce que je définis par tf.espace réservé() est tf.float32. Le type de date float64 et float32 est désadaptation.
Je pense que le problème est dans la définition du dictionnaire. Un dictionnaire clé est d'être un "hashable type", par exemple, un nombre, une chaîne ou un n-uplet sont communs. Une liste ou un tableau ne fonctionnent pas:
Je ne sais pas assez de tensorflow de savoir de quoi il s'agit:
L'erreur indique qu'ils sont des tableaux numpy, pas de chaînes. Ne
x
ont unname
attribut?Ou peut-être que le dictionnaire doit être défini comme suit:
None
n'était pas satisfaisante. Quand j'ai changé, et re-couru mon code, tout a bien fonctionné. Pas encore tout à fait sûr pourquoi.Étrange, j'ai eu ce problème aussi. Après je ferme python, shell et d'exécuter du code à partir d'un fichier que je n'ai pas réussi à le reproduire même dans le shell (il fonctionne w/o une erreur).