Разница между тренировкой и точностью тестирования + учебник Tensorflow - PullRequest
0 голосов
/ 12 июня 2018

Код в этом тензорном потоке учебник использует этот раздел кода для вычисления точности проверки, верно?

eval_input_fn = tf.estimator.inputs.numpy_input_fn(
      x={"x": eval_data},
      y=eval_labels,
      num_epochs=1,
      shuffle=False)
  eval_results = mnist_classifier.evaluate(input_fn=eval_input_fn)
  print(eval_results)

Вопрос: Итак, если бы мне пришлось рассчитывать точность тренировочного набора, чтобы увидеть, не превышает ли моя модель данные моего тренировочного набора, если я изменил значение "x" до train_data и также подайте данные тренировки для тестирования. Даст ли мне точность набора тренировок?

Если нет, как я могу проверить, не превышает ли моя модель мой набор данных?

Как количество шагов влияет на точность?Например, если я тренировал его на 20000 шагов, а затем, если я тренировал его еще на 100. Почему это меняет точность?Это потому, что веса рассчитываются заново?Было бы целесообразно сделать что-то подобное тогда?

mnist_classifier.train(
      input_fn=train_input_fn,
      steps=20000,
      hooks=[logging_hook])

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Как узнать, подходит ли ваша модель для снаряжения - это то, что вы делаете во время обучения модели.Вы должны выделить другой набор, называемый набором данных проверки, который отличается от тестового и обучающего наборов.Типичное разделение наборов данных составляет 70% -20% -10% для обучения, тестирования и проверки правильности соответственно.

Во время обучения каждые n шагов вы проверяете свою модель на наборе данных проверки.На первых итерациях оценка по вашему набору проверок улучшится, но в какой-то момент она ухудшится.Вы можете использовать эту информацию, чтобы прекратить тренировку, когда ваша модель начинает наряжаться, но делать это правильно - искусство.Например, вы можете остановить после 5 тестов, что ваша точность последовательно снижается, потому что иногда вы можете видеть, что это становится хуже, но в следующем тесте это становится лучше.Трудно сказать, это зависит от многих факторов.

Что касается вашего второго вопроса, повторение еще 100 шагов может сделать вашу модель лучше или хуже, в зависимости от того, подходит она или нет, поэтому я боюсь, что этот вопросне имеет четкого ответа.Веса редко перестанут меняться, потому что итерации / шаги «перемещают» их, хорошо это или плохо.Опять же, сложно сказать, как получить хорошие результаты, но вы можете попытаться досрочно прекратить использование набора проверки, как я уже упоминал ранее.

0 голосов
/ 12 июня 2018

Обычно у вас есть 3 набора данных, 1 для обучения, 1 для проверки и 1 для тестирования.Все эти наборы данных должны быть уникальными, изображение обучающего набора может не появиться в проверочном или тестовом наборе и т. Д. Вы тренируетесь с обучающим набором, и после каждой эпохи вы проверяете модель с данными проверки.Оптимизаторы всегда будут пытаться обновить веса, чтобы идеально классифицировать данные обучения, поэтому точность обучения будет очень высокой (> 90).Данные проверки - это данные, которые модель никогда не видела раньше, и выполняемые после каждой эпохи (или x шагов), чтобы показать, насколько хорошо модель реагирует на данные, еще не видела, это показывает, насколько хорошо модель улучшится со временем.,

Чем больше вы тренируетесь, тем выше точность обучения, поскольку оптимизатор приложит все усилия, чтобы довести это значение до 100%.Данные проверки, которые не обновляют веса, также увеличивают сверхурочные, но не постоянно.В то время как точность обучения продолжает улучшаться, точность проверки может перестать улучшаться.В тот момент, когда точность проверки со временем уменьшается, ну, тогда вы переоснащаете.Это означает, что в модели слишком много внимания уделяется обучающим данным и что она не может правильно классифицировать другого персонажа, если он отличается от обучающего набора.

В конце всего обучения вы используете набор тестов.это определит фактическую точность вашей модели для новых данных.

@ xmacz: Я пока не могу добавлять комментарии, только ответы, поэтому я просто обновляю свой ответ.Да, я проверил исходный код, ваши первые строки кода тестируют модель на тестовых данных

0 голосов
/ 12 июня 2018

evaluate - это просто функция, которая выполняет некоторые числовые операции с входными данными и производит некоторые выходные данные.Если вы используете его для тестирования данных, он должен давать точность тестирования, а если вы вводите данные обучения, он должен выводить точность обучения.

В конце концов, это всего лишь математика.То, что вывод интуитивно , это то, что вы должны были бы выяснить.

...