Создание модели глубокого обучения

Наша модель нейронной сети будет состоять из линейного стека слоев. Чтобы определить такую ​​модель, мы называемSequential функция -

model = Sequential()

Входной слой

Мы определяем входной уровень, который является первым слоем в нашей сети, используя следующий программный оператор:

model.add(Dense(512, input_shape=(784,)))

Это создает слой с 512 узлами (нейронами) с 784 входными узлами. Это изображено на рисунке ниже -

Обратите внимание, что все входные узлы полностью подключены к уровню 1, то есть каждый входной узел подключен ко всем 512 узлам уровня 1.

Затем нам нужно добавить функцию активации для вывода уровня 1. Мы будем использовать ReLU в качестве нашей активации. Функция активации добавляется с помощью следующего программного оператора -

model.add(Activation('relu'))

Затем мы добавляем Dropout 20%, используя приведенную ниже инструкцию. Отбрасывание - это метод, используемый для предотвращения переобучения модели.

model.add(Dropout(0.2))

На этом этапе наш входной слой полностью определен. Далее мы добавим скрытый слой.

Скрытый слой

Наш скрытый слой будет состоять из 512 узлов. Вход в скрытый слой поступает из нашего ранее определенного входного слоя. Все узлы полностью подключены, как и в предыдущем случае. Вывод скрытого слоя перейдет к следующему слою в сети, который будет нашим последним и выходным слоем. Мы будем использовать ту же активацию ReLU, что и для предыдущего слоя, с пропуском 20%. Код для добавления этого слоя приведен здесь -

model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))

Сеть на этом этапе можно визуализировать следующим образом -

Затем мы добавим в нашу сеть последний слой, который является выходным слоем. Обратите внимание, что вы можете добавить любое количество скрытых слоев, используя код, аналогичный тому, который вы использовали здесь. Добавление большего количества слоев сделало бы сеть сложной для обучения; тем не менее, дает определенное преимущество в виде лучших результатов во многих случаях, хотя и не во всех.

Выходной слой

Выходной слой состоит всего из 10 узлов, так как мы хотим классифицировать данные изображения по 10 различным цифрам. Мы добавляем этот слой, используя следующую инструкцию -

model.add(Dense(10))

Поскольку мы хотим разделить вывод на 10 отдельных единиц, мы используем активацию softmax. В случае ReLU вывод двоичный. Мы добавляем активацию, используя следующий оператор -

model.add(Activation('softmax'))

На этом этапе нашу сеть можно визуализировать, как показано на диаграмме ниже -

На данный момент наша сетевая модель полностью определена в программном обеспечении. Запустите ячейку кода, и если ошибок нет, вы получите подтверждающее сообщение на экране, как показано на скриншоте ниже -

Далее нам нужно скомпилировать модель.