Оценщик Tensorflow.evaluate(): является ли точность «глобальной» или специфичной для просмотренного пакета?

#python #tensorflow

#python #tensorflow

Вопрос:

Я проверил через stack overflow, насколько мог, и раздел Tensorflow API в Estimator.evaluate(), но не смог найти ничего, что касалось бы этого вопроса.

Я студент, работающий над исследовательским проектом с Tensorflow, я отслеживал точность с помощью evaluate () и сохранял это значение, возвращаемое в текстовом файле. Мой профессор-консультант (который работает с ML / NNs, но не конкретно с python и Tensorflow) хочет знать, является ли это значение точности специфичным для пакета данных, который он видел в данный момент, или это общая точность этой сети с момента создания до этого момента времени.

Может кто-нибудь, пожалуйста, уточнить, является ли «точность» мерой точности для данного пакета данных на момент оценки ИЛИ это мера всех пакетов / данных, которые он видел до этого момента включительно?

Если это НЕ показатель всех пакетов, есть ли какой-либо способ найти это из сети или мне нужно вычислять это вручную?

О том, как я строил / обучал свою сеть (на случай, если это имеет значение): я строю модель на несколько более низком уровне, чем Keras (например, я определяю архитектуру в методе, используя tf.layers), я также никогда явно не запускал сеть с помощью tf.session () (я сталкивался с проблемами только тогда, когда пытался, и прошлые сети прекрасно функционировали без этого).

Ответ №1:

Estimator.evaluate() вызывает input_fn на каждом шаге, который возвращает один пакет данных, как видно из документа https://www.tensorflow.org/api_docs/python/tf/estimator/Estimator#evaluate . Здесь важно то, что возвращает ваш input_fn, т. Е. если тестовые данные невелики, он может возвращать целые данные или он может возвращать данные пакетами, если тестовые данные большие.

Если ваш тестовый набор данных достаточно мал, чтобы поместиться в памяти (RAM), input_fn возвращает все тестовые данные сразу, вы можете передать их один раз и получить результат

например, результат = classifier.evaluate(test_inpf)

Теперь, если ваши тестовые данные велики и не помещаются в память, чтобы получить точность по всему тестовому набору данных, вы можете получить точность для каждого пакета (потому что input_fn теперь будет возвращать пакеты) и взять среднее значение по всем пакетам в вашем наборе данных. например Если ваш тестовый набор данных содержит 100 примеров. Размер пакета равен 10. Для каждого пакета размером 10 вы оцениваете точность. Вы получаете 10 значений точности для dataset. Тогда среднее из них — это точность модели по всему набору данных.

Это также полезный учебник на веб-сайте TensorFlowhttps://www.tensorflow.org/tutorials/estimators/linear