Глава 13. Резюме, заключительные слова и дальнейшие источники информации
527
ные функции активации, то подобные слои и основанные на них сети называются
плотносвязными
(densely connected) или, как называют их некоторые авторы,
полно-
связными
(fully connected). Тем самым они отличаются от прочих типов архитектуры
(сверточных сетей и RNN), в которых выходной элемент может зависеть только от
некоторого подмножества элементов входных данных.
Чаще всего MLP используют для категориальных данных (скажем, в которых
входные признаки представляют собой список атрибутов, как в задаче обнаружения
фишинговых сайтов). Кроме того, они часто используются в качестве завершающих
выходных слоев большинства нейронных сетей, предназначенных для класси
фикации и регрессии, в которых сверточные или рекуррентные слои выполняют
выделение признаков, которые подают затем на вход подобных MLP. Например,
обсуждавшиеся в главах 4 и 5 двумерные сверточные сети все завершают одним или
двумя плотными слоями, как и рекуррентные сети из главы 9.
Давайте вкратце вспомним, как выбирается функция активации выходного
слоя MLP для различных видов задач обучения с учителем. Для бинарной клас
сификации итоговый выходной слой MLP должен включать ровно один нейрон
и использовать сигмафункцию активации. В качестве функции потерь при обуче
нии подобного бинарного классификатора на основе MLP должна использоваться
binaryCrossentropy
. Примеры данных в обучающем наборе должны содержать
бинарные метки (метки со значением 0 или 1). Соответствующий код TensorFlow.js
выглядит вот так:
import * as tf from '@tensorflow/tfjs';
const model = tf.sequential();
model.add(tf.layers.dense({units: 32, activation: 'relu', inputShape:
[numInputFeatures]}));
model.add(tf.layers.dense({units: 32, activation: 'relu'}));
model.add(tf.layers.dense({units: 1: activation: 'sigmoid'}));
model.compile({loss: 'binaryCrossentropy', optimizer: 'adam'});
Для выполнения однозначной многоклассовой классификации (в которой каж
дому примеру данных соответствует ровно один из множества возможных классов)
последовательность слоев должна завершаться плотным слоем с многомерной ло
гистической функцией активации и количеством нейронов, равным числу классов.
При унитарном кодировании целевых признаков в качестве функции потерь следует
использовать
categoricalCrossentropy
, если же они представляют собой целочис
ленные индексы, то
sparseCategoricalCrossentropy
. Например:
const model = tf.sequential();
model.add(tf.layers.dense({units: 32, activation: 'relu', inputShape:
[numInputFeatures]});
model.add(tf.layers.dense({units: 32, activation: 'relu'});
model.add(tf.layers.dense({units: numClasses: activation: 'softmax'});
model.compile({loss: 'categoricalCrossentropy', optimizer: 'adam'});
Для выполнения многозначной многоклассовой классификации (в которой
каждому примеру данных может соответствовать несколько из возможных классов)
последовательность слоев должна завершаться плотным слоем с сигмафункцией
528
Do'stlaringiz bilan baham: |