Вы должны быть осторожны с условиями running_mean
и running_variance
. В математике и в традиционной науке о компьютерах они называются методами, которые вычисляют эти значения, не видя полных данных. Они также известны как online
версии mean
и variance
. Не то чтобы они могли точно определить mean
и variance
заранее. Они просто продолжают обновлять значения некоторых переменных mean
и variance
, поскольку поступает больше данных. Если ваш размер данных конечен, то после просмотра полных данных их значения будут соответствовать значениям, которые можно вычислить, если полные данные доступны.
Случай нормализации партии отличается. Вы не должны думать о running mean
и running variance
так же, как в предыдущем абзаце.
Время обучения
Во время обучения mean
и variance
вычисляются для batch
. Они не running mean
или running variance
. Таким образом, вы можете безопасно использовать tf.nn.moments
для этого.
Время тестирования
Во время тестирования вы используете то, что должно называться population_estimated_mean
и population_estimated_variance
. Эти величины вычисляются во время обучения, но не используются напрямую. Они рассчитаны для последующего использования во время тестирования.
Теперь одна ловушка в том, что некоторые люди могут захотеть использовать Knuth Formula
для вычисления этих величин. Это не рекомендуется. Почему? : Потому что обучение проводится за несколько epochs
. Таким образом, один и тот же набор данных рассматривается столько раз, сколько число epochs
. Поскольку увеличение данных также обычно происходит случайным образом, вычисление стандартных running mean
и running variance
может быть опасным. Вместо этого обычно используется exponentially decaying estimate
.
Вы можете достичь этого, используя tf.train.ExponentialMovingAverage
над batch_mean
и batch_variance
. Здесь вы указываете, насколько актуальность будет дана прошлым образцам по сравнению с нынешними образцами. Убедитесь, что переменные, которые вы используете для вычисления, должны быть non-trainable
, установив trainable=False
.
Во время теста вы будете использовать эти переменные как mean
и variance
.
Для получения более подробной информации о реализации вы можете взглянуть на эту ссылку .