Очень много информации о применении CNN в задачах классификации, но очень мало (нашел один хороший) примеров решения задач регрессии с применением CNN. Есть несколько простых вопросов.
Я только начал изучать 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. Можно ли вытащить веса из найденной сети? Чтобы потом самому ее вычислять матричными умножениями.
Ответы
Добрый день, попробую ответить)
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) А первый вопрос я не понял... можете чуть подругому описать в чем проблема?
Спасибо 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 это то, что я могу менять размер окна и количество обычных ядер.
Заранее спасибо!