• Регистрация
Виталий
Виталий 0.00
н/д

Очень много информации о применении CNN в задачах классификации, но очень мало (нашел один хороший) примеров решения задач регрессии с применением CNN. Есть несколько простых вопросов.

01.09.2019
Я только начал изучать  CNN в среде Matlab. Matlab'ом я уже 20 лет пользуюсь, но задачи NN я стал изучать только сейчас. Очень много материалов про сегментацию и распознавание изображений. Но мне...

Я только начал изучать  CNN в среде Matlab. Matlab'ом я уже 20 лет пользуюсь, но задачи NN я стал изучать только сейчас. Очень много материалов про сегментацию и распознавание изображений. Но мне интересны вопросы регуляризации и применение CNN в задачах масштабирования изображения (вообще в обратных задачах) мне кажется очень перспективным делом.

Поискав в интернете я не нашел примеры решений задач регрессии в объеме достаточном для понимания вопроса при изучении с 0. Посоветуйте книгу или статью, где рассматриваются практическое применение CNN от самых простых примеров к сложным. Все, что я вижу уже требует знание команд. Мне приходиться сразу разбирать сложные примеры узучаю все сразу.

Изучая те примеры, что я нашел (по хорошему я нашел только один пример в help'e matlab) у меня появились простые вопросы:

1. В моей задаче увеличения изображения в 2 раза на входе я имею изображения низкого разрешения - 5х5 точек (после box конволюции эталона размером 10х10 точек). В качестве желаемого решения я имею изображение 2х2. Т.е. центральная область эталона. И тут первая проблема, оказывается данные для обучения и ответы должны быть одного размера. Команда
combine(upsampledImages,residualImages) выдает ошибку - The input arguments to combine must be numeric or character vectors. Как мне быть?

2. Конволюция происходит окном 3х3 (например). Т.е. в расчетах присутствуют 9 весов в ядре свертки. Можно ли в качестве ядра задать NN? Чтобы управлять количеством весов в ядре свертки увеличив его с 9 до оптимальных значений при этом сохранив окно 3х3?.

3. Можно ли вытащить веса из найденной сети? Чтобы потом самому ее вычислять матричными умножениями.

Теги

    01.09.2019

    Комментарии

    • Alexn
      Alexn+360.00
      3.09.2019 10:15

      Добрый день, попробую ответить)

      3) Посмотреть веса можно так net = alexnet;   net.Layers(2).Weights

      2) Параметры слоя свертки вы можите сами задавать convolution2dLayer(5,20)  пример-https://www.mathworks.com/help/releases/R2019a/deeplearning/gs/create-simple-deep-learning-classification-network.html

      1) А первый вопрос я не понял... можете чуть подругому описать в чем проблема?

      • Виталий
        Виталий0.00
        3.09.2019 14:58

        Спасибо Alexn за ответ!

        По первому вопросу я нашел хороший пример и теперь проблемы нет. Теперь я знаю, что можно задавать разные размерности (по ширине) данных для ученика и учителя. 

        а вот как раз во 2ом ответе Вы не совсем ответили на вопрос. Поясню... во всех примерах считается, что ядро свертки это (например) матрица 3х3 соответственно с 9-ю весами. И результат работы такого фильтра описыватся формулой:

        A1*w1+A2*w2+A3*w3+A4*w4+A5*w5+A6*w6+A7*w7+A8*w8+A9*w9;

        (Думаю, Вы поняли, что я написал). Это полином первой степени с 9 переменными. А я хочу использовать другой фильтр работа, которого описывалась бы вот такой формулой:

        A1*A1*w1+А1*А2*w2+...+A1*A9*w9+... A2*A2*w10+...+A2*A9*w17+...+A9*A9*w45 

        Т.е. я хочу повысить степень полинома ядра свертки с первой до второй. Вот в чем вопрос был... могу ли я задать такое ядро свертки не меняя размер окна (3х3)?

        А пока я нашел только такую модификацию ядра свертки - Network in Network. В этой статье было предложено вместо Linear convolution layer использовать Mlpconv Layer Вот статья: 

        https://arxiv.org/pdf/1312.4400.pdf

        А то, что я вижу в руководстве по команде  convolution2dLayer это то, что я могу менять размер окна и количество обычных ядер. 

        Заранее спасибо!