В Matlab 2019b / 2020a, при построении DNN, как изменить выходные данные полностью подключенного слоя до 2D-формы, чтобы мог следовать предварительно обученный CNN?

#matlab #deep-learning

#matlab #глубокое обучение

Вопрос:

Я использую инструментарий глубокого обучения для разработки глубокой нейронной сети. В сети 2D сверточный слой должен следовать за полностью подключенным слоем. Но deepNetworkDesigner не допускает такой структуры, потому что выходные данные полностью подключенного уровня равны 1D. В других фреймворках, таких как Torch, способ решить эту проблему — изменить выходные данные полностью слоя на 2D. Есть ли способ добиться этого в Matlab 2019b / 2020a? Спасибо.

Ответ №1:

Если вы создаете свою сеть без использования анализатора сетей глубокого обучения

Вы можете сделать это, создав полностью подключенный слой с выходным размером 10 и именем ‘fc1’

 layer = fullyConnectedLayer(10,'Name','fc1')
  

Затем, включив его в свой массив слоев

 layers = [ ...
imageInputLayer([28 28 1])
convolution2dLayer(5,20)
reluLayer
maxPooling2dLayer(2,'Stride',2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer]
  

Как вы можете видеть, за полностью подключенными 2D-слоями без проблем последовал полностью подключенный слой размером 10.

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

Затем вы можете завершить свою сеть, создав граф слоев в виде lgraph = layerGraph(layers)


Если вы уже спроектировали свою сеть с помощью конструктора глубоких сетей

Вы можете экспортировать архитектуру сети в рабочую область и изменить ее выходной уровень двумя способами:

1. Использование графического интерфейса

  • На панели конструктора перетащите новый fullyConnectedLayer слой из библиотеки слоев на холст. Установите OutputSize количество классов в новых данных
  • Удалите последний полностью подключенный слой и подключите вместо него новый слой
  • если вашей целью была разработка сети классификации, замените выходной уровень. Прокрутите до конца библиотеки слоев и перетащите новый classificationLayer на холст. Удалите исходный выходной слой и подключите вместо него новый слой
  • Проверьте свою сеть, нажав Анализ. Сеть готова к обучению, если анализатор сети глубокого обучения сообщает об отсутствии ошибок.

2. Без использования графического интерфейса

  • На вкладке Конструктор нажмите Экспорт. В зависимости от архитектуры сети, Deep Network Designer экспортирует сеть в виде LayerGraph lgraph
  • Замените последний слой на тот, который использует newlgraph = replaceLayer(lgraph,the layer you want to change, the desired new layer)
  • Используйте analyzeNetwork(newlgraph) , чтобы проверить, готова ли сеть к обучению. Если это так, сетевой анализатор должен сообщать о нулевых ошибках.