TensorFlow - проверка точности с данными партии - PullRequest
0 голосов
/ 01 мая 2018

Как сказано в руководствах, после каждого определенного шага мне нужно использовать набор данных 'validation' для проверки точности модели к настоящему времени и использовать набор данных 'test' для окончательного тестирования точности.

пример кода:

correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

validate_acc = sess.run(accuracy, feed_dict=validate_feed)

Но я считаю, что он слишком велик для моего устройства, возможно, возникает OOM.

Как передать методу 'точность' партию validate_feed и получить общую сумму 'validate_acc'?

(если я создаю итератор из набора данных, как я могу передать next_batch в метод «точность»?)

Спасибо всем за помощь!

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Используйте tf.metrics.acccuracy. Он выполняет потоковое вычисление точности, что означает, что он накапливает всю необходимую информацию для вас и возвращает текущую оценку точности при необходимости.

См. этот ответ для примера того, как его использовать.

0 голосов
/ 01 мая 2018

Обычно для измерения точности вы используете что-то похожее на следующее:

correct_prediction = tf.equal(tf.argmax(logits, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

Логиты - это последняя особенность, которую вы обычно передаете в softmax - кросс-энтропийный слой. Выше рассчитывается точность для данной партии, но не для всего набора данных. Вместо этого вы можете сделать следующее:

correct_prediction = tf.equal(tf.argmax(logits, 1), tf.argmax(y_, 1))
total_correct = tf.reduce_sum(tf.cast(correct_prediction, tf.float32))

Выполните «total_correct» для каждой партии в вашем тестовом наборе и накопите их:

  correct_sum = 0
  for batch in data_set:
       batch_correct_count = sess.run(total_correct, feed_dict=validate_feed)
       correct_sum += batch_correct_count

  total_accuracy = correct_sum / data_set.size()

Используя приведенную выше формулировку, вы можете правильно рассчитать общую точность, обрабатывая данные партиями. Это, конечно, при условии, что цикл for выполняется на взаимоисключающих пакетах из набора данных. Вам следует избегать - отключать выборку iid или выборку с заменой из набора данных, что обычно делается для стохастического обучения.

...