Ответы пользователя по тегу Машинное обучение
  • Как правильно анализировать большое изображение с помощью модели с фиксированным размером входного изображения?

    @imageman
    1. Использовать структуру нейросети, которая на вход принимает большие картинки (вроде как U-Net из коробки работает так, что может обработать как 256*256, так и 1024*1024).
    2. Анализировать квадратами (нарезать) с перекрытием, потом сшивать как сшивают панорамы (поищите smartblend.exe). https://wiki.panotools.org/SmartBlend
    3. Заранее тренировать модель с учетом перекрытия, в этом случае сшивка должна быть сильно проще.
    Ответ написан
  • Используют ли при обучении нейронных сетей генетические алгоритмы?

    @imageman
    Даже для маленькой (по нынешним меркам) нейросети обучение градиентными методами будет быстрее на несколько порядков по сравнению с ГА (я подозреваю, что как минимум на 2-3 десятичных порядка быстрее). Когда же речь зайдет о больших нейросетях..... Там процесс обучения итак медленный, а замедлять его при помощи ГА не стоит. Тут в комментариях начинают спорить про дифференцируемость и про оптимизацию. Все нынешние нейросети делаются (проектируются) из расчета на градиентное обучение (метод обратного распространения ошибки), т.к. это сейчас самый быстрый способ. Оптимизация это, видимо, подбор гиперпамаретров? Да, он может делаться через ГА, но не делается. Для ГА характерно слишком большое число итераций, намного больше 100, а каждая итерация может занимать сутки. Слишком долго. По моим наблюдениям для подбора оптимальных параметров сильно нелинейной функции от 50 переменных ГА нужно более миллиона итераций. Для 18 переменных - 50 тысяч, для 23 - 200 тысяч. lit999.narod.ru/soft/ga/index.html - страница с моими старыми экспериментами (сравнение ГА с алгоритмом роя пчел) и https://imageman72.livejournal.com/5373.html.

    Но если нам нужно сделать какую-то совсем нестандартную нейросеть, при этом очень крохотную - может и пригодится ГА (было у меня и такое решение, но я не сравнивал его с градиентным спуском).
    Ответ написан
  • Как переписать строку torch.argmax(model_out[0], dim=-1) без использования torch?

    @imageman
    Не хочется грузить библиотеку torch - это как? Вы же её используете по полной? Через что вы вычисляете значения модели? Ведь строка "with torch.no_grad()" неспроста у вас.

    По какой причине решено экономить на спичках? Время работы, экономия памяти?

    Попробуй вместо "проблемного" "torch.argmax(model_out[0], dim=-1)" поставить 0 и проанализируй как поменялось использование ресурсов.
    Ответ написан
    Комментировать
  • Как правильно учить с подкреплением?

    @imageman
    1. Функция активации всегда нелинейная (поэтому leak relu должен быть ломаной, не должен быть простой прямой).
    2. Активации разных слоев могут быть разными - в скрытых слоях leak relu, в финальном - сигмоида
    3. Один скрытый слой мало. Пробуйте 2-3 хотя бы.
    4. Пробуйте разные скорости обучения (0,001)
    5. Число итераций градиентного спуска может и побольше нужно делать.

    А точно всё это нужно самостоятельно писать на C++? Может лучше взять готовые реализации библиотек обучения (PyTorch, tensorflow)? Проект ONNX https://ru.wikipedia.org/wiki/ONNX позволяет экспортировать модели (но сам я пока не попробовал). Так же никто не запрещает из программы на C++ вызывать питоновский скрипт (как внешнюю программу).
    Ответ написан
  • Возможно ли обучить GAN без batchnorm?

    @imageman
    Да, можно без нормализации.

    Вот тут https://github.com/eriklindernoren/PyTorch-GAN собрано довольно много реализаций нейросетей (я оттуда с ESRGAN экспериментировал).

    FeedForward (это те, что полносвязные) практически тупиковый путь. Посчитайте сколько вы весов заложили в свою нейросеть. Для картинок пробуйте сверточные нейросети.
    Ответ написан
    5 комментариев
  • Как лучше изменить нейронную сеть?

    @imageman
    > 437 бинарных признаков. Есть обучающая выборка на ~400 случаев.

    Это означает, что нейросеть у вас будет переобучена. Для любого машинного обучения число строк обучения должно быть намного больше числа колонок. Если будете сокращать число колонок, это (по моему) в данном случае ничего кардинально не изменит.

    В нейросети лучше минимум один скрытый слой, если есть возможность то увеличивайте число скрытых слоев. Пробуйте различные конфигурации слоев ("бочка", "рюмка", "прямоугольник"). Выходной слой можно пробовать дискретное число (номер класса), а можно пробовать в выходном слое число выходов = числу классов (все нули, кроме одной единицы напротив нужного класса).
    Ответ написан
    1 комментарий