Объект numpy.dtype не имеет атрибута base_dtype

Я новичок в tensorflow, так что мой код разворачивается именно так!

import tensorflow as tf
import tensorflow.contrib.learn as learn
mnist = learn.datasets.mnist.read_data_sets('MNIST-data',one_hot=True)
import numpy as np
M = tf.Variable(tf.zeros([784,10]))
B = tf.Variable(tf.zeros([10]))
image_holder = tf.placeholder(tf.float32,[None,784])
label_holder = tf.placeholder(tf.float32,[None,10])
predicted_value = tf.add(tf.matmul(image_holder,M),B)
loss= tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=predicted_value , labels=label_holder))
learning_rate = 0.01
num_epochs = 1000
batch_size = 100
num_batches = int(mnist.train.num_examples/batch_size)
init = tf.global_variables_initializer()
optimizer =  tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
with tf.Session() as sess:
    sess.run(init)
    for _ in range(num_epochs):
        for each_batch in range(num_batches):
            current_image, current_image_label = mnist.train.next_batch(batch_size)
            optimizer_value,loss = sess.run([optimizer,loss],feed_dict = {image_holder:current_image,label_holder:current_image_label})
        print ("The loss value is {} \n".format(loss))    

Но проблема, которую я получаю, заключается в этой странной ошибке, которая говорит

'numpy.dtype' object has no attribute 'base_dtype'

Я не знаю, что не так с кодом, который я считаю абсолютно правильным. Любая помощь по этому вопросу?

Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
1
0
5 508
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Прежде всего некоторые комментарии:

  • Инициализация переменных всегда должна идти в конце графа построения
  • Оптимизатор и обучающая операция должны быть разделены; не обязательно, но это хорошая практика.
  • Также, когда вы запускаете sess.run(variable), убедитесь, что это не одна и та же переменная. То есть убедитесь, что вы не делаете этого: variable=sess.run(variable). Потому что вы перезаписываете его.

Ошибка здесь была последней. Таким образом, когда-то работающий код может выглядеть примерно так:

M = tf.Variable(tf.zeros([784,10]), dtype=tf.float32)
B = tf.Variable(tf.zeros([10]), dtype=tf.float32)

image_holder = tf.placeholder(tf.float32,[None,784])
label_holder = tf.placeholder(tf.float32,[None,10])
predicted_value = tf.add(tf.matmul(image_holder,M),B)
loss= tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=predicted_value , labels=label_holder))
learning_rate = 0.01
num_epochs = 1000
batch_size = 100
num_batches = int(mnist.train.num_examples/batch_size)

optimizer =  tf.train.GradientDescentOptimizer(learning_rate)
train_op = optimizer.minimize(loss)
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for _ in range(num_epochs):
        for each_batch in range(num_batches):
            current_image, current_image_label = mnist.train.next_batch(batch_size)

            optimizer_value,loss_value = sess.run([train_op,loss],feed_dict = {image_holder:current_image,label_holder:current_image_label})
        print ("The loss value is {} \n".format(loss_value)) 

Надеюсь, это помогло

Точнее говоря, вы просто перезаписал своего узла lossпо величине «убытка», когда делали sess.run([_, loss]) в первый раз. Таким образом, во второй раз цикла for session увидит значение numpy вместо исходного loss op

не могли бы вы объяснить это новичку? У меня возникли проблемы с пониманием вашего объяснения.

lets0code 22.06.2019 21:48

@moegizzle, когда ты это сделаешь loss = tf.reduce_mean(). Это просто узел, через который не проходит поток значений. Но когда вы делаете loss = session.run(), вы присваиваете значение потере. значение loss ≠ узел

Zézouille 23.06.2019 04:36

Другие вопросы по теме