Pull to refresh

Comments 4

Вы эту реализацию U-net сами написали или взяли откуда-то? Есть некоторые вопросы:


x = Conv2D(filters, 
           size, 
           strides=strides, 
           padding=padding)(x)
x = BatchNormalization()(x)

Почему в свёртке не указано use_bias = False? По-идее он бесполезным будет, если сразу после неё используется нормализация. Или оно вообще не влияет на результат и производительность, и проще не писать лишнюю строчку?


Зачем после макс-пулинга используется dropout? Разве батч-нормализации недостаточно? От него в данном случае есть какой-нибудь ощутимый эффект? Зачем у dropout разный rate на разных мастштабах? Из каких соображений это получается?


И ещё — в каждом residual блоке выход после последней свёртки нормализуется. Из-за этого получается, что каждый блок делает примерно одинаковый вклад, даже если, например, предыдущие слои уже всё распознали и вклад от текущего блока не особо нужен. Не получится ли, что без нормализации в конце каждого блока сеть обучится лучше?


deconv4 = Conv2DTranspose(start_neurons * 8, (3, 3),
                          strides=(2, 2),
                          padding="same")(convm)

Почему для увеличения используется транспонированная свёртка с ядром 3*3? Будет же проблема с шахматным рисунком.


Просто в оригинальной статье нет ни слова про dropout, батч-нормализацию, residual-блоки, а для увеличения используется "up-convolution 2x2".


Общей идеей архитектура вроде бы похожа на U-net, но, как мне кажется, стоило хотябы упомянуть отличия — а лучше объяснить, почему сделанно именно таким образом, хотя бы на уровне "батч-нормализация точно нужна" или "dropout просто потому что так захотелось".

сеть выбрана из кернелов каггла и на тот момент была весьма популярна.
UFO just landed and posted this here
Данные там обновляли.
На реальных данных очень долго считать, на тех же корабликах 10 суток заняла тренировка.
Sign up to leave a comment.

Articles