Поскольку я использую трехмерные медицинские изображения в качестве набора данных для обучения, размер пакета может быть установлен только на 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 и, судя по коду, считаю, что последний правильный.
У кого-нибудь другое мнение ???