Что произойдет, если я использую пакетную нормализацию, но установлю batch_size = 1?

Поскольку я использую трехмерные медицинские изображения в качестве набора данных для обучения, размер пакета может быть установлен только на 1 из-за ограничений графического процессора. Некоторые люди сказали мне, что std dev будет 0, когда batch_size = 1. А (x-mean) / std_dev приведет к ошибке из-за деления на 0.

Но почему при установке batch_size = 1 ошибок не возникало? Почему моя сеть была обучена так хорошо, как я ожидал? Может ли кто-нибудь объяснить это?

Некоторые люди утверждали, что:

ZeroDivisionError может не встречаться по двум причинам. Во-первых, исключение перехватывается в try блоке catch. Во-вторых, к члену дисперсии добавляется небольшое рациональное число (1e-19), чтобы оно никогда не было нулем.

Но некоторые люди не согласны с этим. Они сказали, что:

Вы должны рассчитать среднее и стандартное значение для всех пикселей в изображениях партии. (Так что даже batch_size = 1, в пакете по-прежнему много пикселей. Итак, причина, по которой batch_size=1 может работать, не из-за 1e-19)

Я проверил исходный код pytorch и, судя по коду, считаю, что последний правильный.

У кого-нибудь другое мнение ???


person Jingnan Jia    schedule 10.01.2020    source источник
comment
Нормализация партии, когда размер партии = 1, этот ответ не отвечает на мой вопрос, я нужно больше объяснений.   -  person Jingnan Jia    schedule 11.01.2020
comment
Не следует задавать один и тот же вопрос более одного раза, поэтому он помечен как повторяющийся. Вы всегда можете редактировать свои вопросы.   -  person Dr. Snoopy    schedule 11.01.2020
comment
@MatiasValdenegro Я отредактировал исходный вопрос. Не могли бы вы помочь ответить на него еще раз?   -  person Jingnan Jia    schedule 11.01.2020