Как написать сводный журнал, используя тензор потока для логистической регрессии на данных MNIST? - PullRequest
1 голос
/ 07 марта 2019

Я новичок с tensorflow и реализацией tensorboard. Это мой самый первый опыт применения logistic regression в данных MNIST с использованием тензорного потока. Я успешно реализовал логистическую регрессию в данных, и теперь я пытаюсь записать сводку в файл журнала, используя tf.summary .fileWriter.

Вот мой код, который влияет на итоговый параметр

x = tf.placeholder(dtype=tf.float32, shape=(None, 784))
y = tf.placeholder(dtype=tf.float32, shape=(None, 10)) 

loss_op = tf.losses.mean_squared_error(y, pred)
correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
accuracy_op = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

tf.summary.scalar("loss", loss_op)
tf.summary.scalar("training_accuracy", accuracy_op)
summary_op = tf.summary.merge_all()

А вот так я тренирую свою модель

with tf.Session() as sess:   
    sess.run(init)
    writer = tf.summary.FileWriter('./graphs', sess.graph)

    for iter in range(50):
        batch_x, batch_y = mnist.train.next_batch(batch_size)
        _, loss, tr_acc,summary = sess.run([optimizer_op, loss_op, accuracy_op, summary_op], feed_dict={x: batch_x, y: batch_y})
        summary = sess.run(summary_op, feed_dict={x: batch_x, y: batch_y})
        writer.add_summary(summary, iter)

После добавления строки сводки для получения сводной сводки я получаю сообщение об ошибке ниже


InvalidArgumentError (see above for traceback): 
You must feed a value for placeholder tensor 'Placeholder_37' 
with dtype float and shape [?,10]

Эта ошибка указывает на объявление Y

y = tf.placeholder(dtype=tf.float32, shape=(None, 10)) 

Не могли бы вы помочь мне, что я делаю не так?

1 Ответ

1 голос
/ 09 марта 2019

Из сообщения об ошибке похоже, что вы выполняете свой код в какой-то среде jupyter.Попробуйте перезапустить ядро ​​/ среду выполнения и запустить все заново.Запуск кода дважды в графическом режиме плохо работает в jupyter.Если я запускаю свой код, приведенный ниже, в первый раз, когда он не возвращает никаких ошибок, когда я запускаю его во второй раз (без перезапуска ядра / среды выполнения), он падает так же, как ваш.

Я былслишком ленив, чтобы проверить это на реальной модели, поэтому мой pred=y.;) Но приведенный ниже код не дает сбоя, поэтому вы сможете адаптировать его под свои нужды.Я проверял это в Google Colab.

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

x = tf.placeholder(dtype=tf.float32, shape=(None, 784), name='x-input')
y = tf.placeholder(dtype=tf.float32, shape=(None, 10), name='y-input')

pred = y
loss_op = tf.losses.mean_squared_error(y, pred)
correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
accuracy_op = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

with tf.name_scope('summaries'):
  tf.summary.scalar("loss", loss_op, collections=["train_summary"])
  tf.summary.scalar("training_accuracy", accuracy_op, collections=["train_summary"])

with tf.Session() as sess:   
  summary_op = tf.summary.merge_all(key='train_summary')
  train_writer = tf.summary.FileWriter('./graphs', sess.graph)
  sess.run([tf.global_variables_initializer(),tf.local_variables_initializer()])

  for iter in range(50):
    batch_x, batch_y = mnist.train.next_batch(1)
    loss, acc, summary = sess.run([loss_op, accuracy_op, summary_op], feed_dict={x:batch_x, y:batch_y})
    train_writer.add_summary(summary, iter)
...