После того, как вы убедились, что ваш конвейер данных правильный.Здесь есть несколько вещей, на которые стоит обратить внимание, я надеюсь, что одна из упомянутых ниже поможет:
1.Выберите правильную функцию потерь Двоичная кросс-центропия может привести вашу сеть в направлении оптимизации для всех меток, теперь, если у вас есть несбалансированное количество меток на вашем изображении, она может нарисовать вашу сеть, чтобы вернуть либо белый, серый илипредсказания черного изображения.Попробуйте использовать коэффициент потери кубика
2.Измените строку в testGenerator В data.py
существует проблема, которая, по-видимому, является проблемой, а метод testGenerator
- это следующая строка:
img = img / 255
Измените ее на:
img /=255.
3.Уменьшите скорость обучения , если ваша скорость обучения слишком высока, вы можете сходиться в неоптимальной оптиме, которая также имеет тенденцию оптимизировать только для серых, черных или белых предсказаний.Попробуйте скорость обучения около Adam(lr = 3e-5)
и обучайтесь достаточному количеству эпох, вы должны напечатать потерю костей, а не точность, чтобы проверить вашу конвергенцию.
4.Не используйте функции активации для последнего набора сверток Для последнего набора сверток, то есть 128-> 64 -> 64 -> 1, функция активации не должна использоваться!Функция активации приводит к исчезновению значений!
5.Ваш метод сохранения может иметь «ошибку» , убедитесь, что вы масштабируете изображение до значений от 0 до 255 перед сохранением.Skimage обычно предупреждает вас с низким уровнем контрастности изображения.
from skimage import img_as_uint
io.imsave(os.path.join(save_path,"%d_predict.tif"%(i)),img_as_uint(img))