Слой Long short-term memory (LSTM)
Слой LSTM изучает долгосрочные зависимости между временными шагами в данных о последовательности и временных рядах.
Слой выполняет аддитивные взаимодействия, которые могут помочь улучшить поток градиента по длинным последовательностям во время обучения.
создает слой LSTM и устанавливает layer
= lstmLayer(numHiddenUnits
)NumHiddenUnits
свойство.
устанавливает дополнительный layer
= lstmLayer(numHiddenUnits
,Name,Value
)OutputMode
, Активации, состояние, параметры и инициализация, скорость обучения и регуляризация и Name
свойства с помощью одного или нескольких аргументов пары "имя-значение". Можно задать несколько аргументов пары "имя-значение". Заключите каждое имя свойства в кавычки.
NumHiddenUnits
— Количество скрытых модулейКоличество скрытых модулей (также известный как скрытый размер) в виде положительного целого числа.
Количество скрытых модулей соответствует объему информации, который помнят между временными шагами (скрытое состояние). Скрытое состояние может содержать информацию от всех предыдущих временных шагов, независимо от длины последовательности. Если количество скрытых модулей является слишком большим, то слой может сверхсоответствовать к обучающим данным. Это значение может варьироваться от нескольких дюжин до нескольких тысяч.
Скрытое состояние не ограничивает количество временных шагов, которые обрабатываются в итерации. Чтобы разделить ваши последовательности в меньшие последовательности для обучения, используйте 'SequenceLength'
опция в trainingOptions
.
Пример: 200
OutputMode
— Режим вывода'sequence'
(значение по умолчанию) | 'last'
Режим вывода в виде одного из следующего:
'sequence'
– Выведите полную последовательность.
'last'
– Выведите последний временной шаг последовательности.
HasStateInputs
— Отметьте для входных параметров состояния к слою
(FALSE) (значение по умолчанию) | 1
TRUEОтметьте для входных параметров состояния к слою в виде 0
(FALSE) или 1
TRUE.
Если HasStateInputs
свойством является 0
(FALSE), затем слой имеет вход того с именем 'in'
, который соответствует входным данным. В этом случае слой использует HiddenState
и CellState
свойства для операции слоя.
Если HasStateInputs
свойством является 1
(TRUE), затем слой имеет три входных параметров с именами 'in'
скрытый
, и 'cell'
, которые соответствуют входным данным, скрытому состоянию и состоянию ячейки соответственно. В этом случае слой использует значения, переданные этим входным параметрам для операции слоя. Если HasStateInputs
1
(TRUE), затем HiddenState
и CellState
свойства должны быть пустыми.
HasStateOutputs
— Отметьте для выходных параметров состояния от слоя
(FALSE) (значение по умолчанию) | 1
TRUEОтметьте для выходных параметров состояния от слоя в виде 0
(FALSE) или 1
TRUE.
Если HasStateOutputs
свойством является 0
(FALSE), затем слой имеет тот выход с именем 'out'
, который соответствует выходным данным.
Если HasStateOutputs
свойством является 1
(TRUE), затем слой имеет три выходных параметров с именами 'out'
скрытый
, и 'cell'
, которые соответствуют выходным данным, скрытому состоянию и состоянию ячейки, соответственно. В этом случае слой также выводит значения состояния, вычисленные во время операции слоя.
InputSize
— Введите размер'auto'
(значение по умолчанию) | положительное целое число Введите размер в виде положительного целого числа или 'auto'
. Если InputSize
'auto'
, затем программное обеспечение автоматически присваивает входной размер в учебное время.
Пример: 100
StateActivationFunction
— Функция активации, чтобы обновить ячейку и скрытое состояние'tanh'
(значение по умолчанию) | 'softsign'
Функция активации, чтобы обновить ячейку и скрытое состояние в виде одного из следующего:
'tanh'
– Используйте гиперболическую функцию тангенса (tanh).
'softsign'
– Используйте функцию softsign .
Слой использует эту опцию в качестве функции в вычислениях, чтобы обновить ячейку и скрытое состояние. Для получения дополнительной информации о том, как функции активации используются в слое LSTM, видят Слой Long Short-Term Memory.
GateActivationFunction
— Функция активации, чтобы примениться к логическим элементам'sigmoid'
(значение по умолчанию) | 'hard-sigmoid'
Функция активации, чтобы примениться к логическим элементам в виде одного из следующего:
'sigmoid'
– Используйте сигмоидальную функцию .
'hard-sigmoid'
– Используйте трудную сигмоидальную функцию
Слой использует эту опцию в качестве функции в вычислениях для логических элементов слоя.
CellState
— Состояние ячейкиСостояние ячейки, чтобы использовать в операции слоя в виде NumHiddenUnits
- 1 числовой вектор. Это значение соответствует состоянию первичной клетки, когда данные передаются слою.
После установки этого свойства вручную, вызовов resetState
функционируйте устанавливает состояние ячейки на это значение.
Если HasStateInputs
true
, затем CellState
свойство должно быть пустым.
HiddenState
— Скрытое состояниеСкрытое состояние, чтобы использовать в операции слоя в виде NumHiddenUnits
- 1 числовой вектор. Это значение соответствует начальной букве скрытое состояние, когда данные передаются слою.
После установки этого свойства вручную, вызовов resetState
функционируйте устанавливает скрытое состояние на это значение.
Если HasStateInputs
true
, затем HiddenState
свойство должно быть пустым.
InputWeightsInitializer
— Функция, чтобы инициализировать входные веса'glorot'
(значение по умолчанию) | 'he'
| 'orthogonal'
| 'narrow-normal'
| 'zeros'
| 'ones'
| указатель на функциюФункция, чтобы инициализировать входные веса в виде одного из следующего:
'glorot'
– Инициализируйте входные веса инициализатором Glorot [4] (также известный как инициализатор Ксавьера). Инициализатор Glorot независимо выборки от равномерного распределения с нулевым средним значением и отклонением 2/(InputSize + numOut)
, где numOut = 4*NumHiddenUnits
.
'he'
– Инициализируйте входные веса Им инициализатор [5]. Он выборки инициализатора от нормального распределения с нулевым средним значением и отклонением 2/InputSize
.
'orthogonal'
– Инициализируйте входные веса Q, ортогональная матрица, данная разложением QR Z = Q R для случайного матричного Z, произведенного от модульного нормального распределения. [6]
'narrow-normal'
– Инициализируйте входные веса путем независимой выборки от нормального распределения с нулевым средним и стандартным отклонением 0.01.
'zeros'
– Инициализируйте входные веса нулями.
'ones'
– Инициализируйте входные веса единицами.
Указатель на функцию – Инициализирует входные веса пользовательской функцией. Если вы задаете указатель на функцию, то функция должна иметь форму weights = func(sz)
, где sz
размер входных весов.
Слой только инициализирует входные веса когда InputWeights
свойство пусто.
Типы данных: char |
string
| function_handle
RecurrentWeightsInitializer
— Функция, чтобы инициализировать текущие веса'orthogonal'
(значение по умолчанию) | 'glorot'
| 'he'
| 'narrow-normal'
| 'zeros'
| 'ones'
| указатель на функциюФункция, чтобы инициализировать текущие веса в виде одного из следующего:
'orthogonal'
– Инициализируйте текущие веса Q, ортогональная матрица, данная разложением QR Z = Q R для случайного матричного Z, произведенного от модульного нормального распределения. [6]
'glorot'
– Инициализируйте текущие веса инициализатором Glorot [4] (также известный как инициализатор Ксавьера). Инициализатор Glorot независимо выборки от равномерного распределения с нулевым средним значением и отклонением 2/(numIn + numOut)
, где numIn = NumHiddenUnits
и numOut = 4*NumHiddenUnits
.
'he'
– Инициализируйте текущие веса Им инициализатор [5]. Он выборки инициализатора от нормального распределения с нулевым средним значением и отклонением 2/NumHiddenUnits
.
'narrow-normal'
– Инициализируйте текущие веса путем независимой выборки от нормального распределения с нулевым средним и стандартным отклонением 0.01.
'zeros'
– Инициализируйте текущие веса нулями.
'ones'
– Инициализируйте текущие веса единицами.
Указатель на функцию – Инициализирует текущие веса пользовательской функцией. Если вы задаете указатель на функцию, то функция должна иметь форму weights = func(sz)
, где sz
размер текущих весов.
Слой только инициализирует текущие веса когда RecurrentWeights
свойство пусто.
Типы данных: char |
string
| function_handle
BiasInitializer
— Функция, чтобы инициализировать смещение'unit-forget-gate'
(значение по умолчанию) | 'narrow-normal'
| 'ones'
| указатель на функциюФункция, чтобы инициализировать смещение в виде одного из следующего:
'unit-forget-gate'
– Инициализируйте забыть смещение затвора единицами и остающиеся смещения с нулями.
'narrow-normal'
– Инициализируйте смещение путем независимой выборки от нормального распределения с нулевым средним и стандартным отклонением 0.01.
'ones'
– Инициализируйте смещение единицами.
Указатель на функцию – Инициализирует смещение пользовательской функцией. Если вы задаете указатель на функцию, то функция должна иметь форму bias = func(sz)
, где sz
размер смещения.
Слой только инициализирует смещение когда Bias
свойство пусто.
Типы данных: char |
string
| function_handle
InputWeights
— Введите веса[]
(значение по умолчанию) | матрицаВведите веса в виде матрицы.
Входная матрица веса является конкатенацией четырех входных матриц веса для компонентов (логические элементы) в слое LSTM. Эти четыре матрицы конкатенированы вертикально в следующем порядке:
Введите логический элемент
Забудьте логический элемент
Кандидат ячейки
Выведите логический элемент
Входные веса являются настраиваемыми параметрами. При обучении сети, если InputWeights
непусто, затем trainNetwork
использует InputWeights
свойство как начальное значение. Если InputWeights
пусто, затем trainNetwork
использует инициализатор, заданный InputWeightsInitializer
.
В учебное время, InputWeights
4*NumHiddenUnits
- InputSize
матрица.
RecurrentWeights
— Текущие веса[]
(значение по умолчанию) | матрицаТекущие веса в виде матрицы.
Текущая матрица веса является конкатенацией четырех текущих матриц веса для компонентов (логические элементы) в слое LSTM. Эти четыре матрицы вертикально конкатенированы в следующем порядке:
Введите логический элемент
Забудьте логический элемент
Кандидат ячейки
Выведите логический элемент
Текущие веса являются настраиваемыми параметрами. При обучении сети, если RecurrentWeights
непусто, затем trainNetwork
использует RecurrentWeights
свойство как начальное значение. Если RecurrentWeights
пусто, затем trainNetwork
использует инициализатор, заданный RecurrentWeightsInitializer
.
В учебное время RecurrentWeights
4*NumHiddenUnits
- NumHiddenUnits
матрица.
Bias
— Смещения слоя[]
(значение по умолчанию) | числовой векторСлой смещает для слоя LSTM в виде числового вектора.
Вектор смещения является конкатенацией четырех векторов смещения для компонентов (логические элементы) в слое LSTM. Эти четыре вектора конкатенированы вертикально в следующем порядке:
Введите логический элемент
Забудьте логический элемент
Кандидат ячейки
Выведите логический элемент
Смещения слоя являются настраиваемыми параметрами. Когда вы обучаете сеть, если Bias
непусто, затем trainNetwork
использует Bias
свойство как начальное значение. Если Bias
пусто, затем trainNetwork
использует инициализатор, заданный BiasInitializer
.
В учебное время, Bias
4*NumHiddenUnits
- 1 числовой вектор.
InputWeightsLearnRateFactor
— Фактор скорости обучения для входных весовФактор скорости обучения для входных весов в виде числового скаляра или числового вектора 1 на 4.
Программное обеспечение умножает этот фактор на глобальную скорость обучения, чтобы определить фактор скорости обучения для входных весов слоя. Например, если InputWeightsLearnRateFactor
2, затем фактором скорости обучения для входных весов слоя является дважды текущая глобальная скорость обучения. Программное обеспечение определяет глобальную скорость обучения на основе настроек, заданных с trainingOptions
функция.
Управлять значением фактора скорости обучения для четырех отдельных матриц в InputWeights
, задайте вектор 1 на 4. Записи InputWeightsLearnRateFactor
соответствуйте фактору скорости обучения следующего:
Введите логический элемент
Забудьте логический элемент
Кандидат ячейки
Выведите логический элемент
Чтобы задать то же значение для всех матриц, задайте неотрицательный скаляр.
Пример 2
Пример:
[1 2 1 1]
RecurrentWeightsLearnRateFactor
— Фактор скорости обучения для текущих весовФактор скорости обучения для текущих весов в виде числового скаляра или числового вектора 1 на 4.
Программное обеспечение умножает этот фактор на глобальную скорость обучения, чтобы определить скорость обучения для текущих весов слоя. Например, если RecurrentWeightsLearnRateFactor
2, затем скорость обучения для текущих весов слоя является дважды текущей глобальной скоростью обучения. Программное обеспечение определяет глобальную скорость обучения на основе настроек, заданных с trainingOptions
функция.
Управлять значением фактора скорости обучения для четырех отдельных матриц в RecurrentWeights
, задайте вектор 1 на 4. Записи RecurrentWeightsLearnRateFactor
соответствуйте фактору скорости обучения следующего:
Введите логический элемент
Забудьте логический элемент
Кандидат ячейки
Выведите логический элемент
Чтобы задать то же значение для всех матриц, задайте неотрицательный скаляр.
Пример 2
Пример:
[1 2 1 1]
BiasLearnRateFactor
— Фактор скорости обучения для смещенийФактор скорости обучения для смещений в виде неотрицательного скаляра или числового вектора 1 на 4.
Программное обеспечение умножает этот фактор на глобальную скорость обучения, чтобы определить скорость обучения для смещений в этом слое. Например, если BiasLearnRateFactor
2
, затем скорость обучения для смещений в слое является дважды текущей глобальной скоростью обучения. Программное обеспечение определяет глобальную скорость обучения на основе настроек, вы задаете использование trainingOptions
функция.
Управлять значением фактора скорости обучения для четырех отдельных векторов в Bias
, задайте вектор 1 на 4. Записи BiasLearnRateFactor
соответствуйте фактору скорости обучения следующего:
Введите логический элемент
Забудьте логический элемент
Кандидат ячейки
Выведите логический элемент
Чтобы задать то же значение для всех векторов, задайте неотрицательный скаляр.
Пример 2
Пример:
[1 2 1 1]
InputWeightsL2Factor
— Фактор регуляризации L2 для входных весовФактор регуляризации L2 для входных весов в виде числового скаляра или числового вектора 1 на 4.
Программное обеспечение умножает этот фактор на глобальный фактор регуляризации L2, чтобы определить фактор регуляризации L2 для входных весов слоя. Например, если InputWeightsL2Factor
2, затем фактором регуляризации L2 для входных весов слоя является дважды текущий глобальный фактор регуляризации L2. Программное обеспечение определяет фактор регуляризации L2 на основе настроек, заданных с trainingOptions
функция.
Управлять значением фактора регуляризации L2 для четырех отдельных матриц в InputWeights
, задайте вектор 1 на 4. Записи InputWeightsL2Factor
соответствуйте фактору регуляризации L2 следующего:
Введите логический элемент
Забудьте логический элемент
Кандидат ячейки
Выведите логический элемент
Чтобы задать то же значение для всех матриц, задайте неотрицательный скаляр.
Пример 2
Пример:
[1 2 1 1]
RecurrentWeightsL2Factor
— Фактор регуляризации L2 для текущих весовФактор регуляризации L2 для текущих весов в виде числового скаляра или числового вектора 1 на 4.
Программное обеспечение умножает этот фактор на глобальный фактор регуляризации L2, чтобы определить фактор регуляризации L2 для текущих весов слоя. Например, если RecurrentWeightsL2Factor
2, затем фактором регуляризации L2 для текущих весов слоя является дважды текущий глобальный фактор регуляризации L2. Программное обеспечение определяет фактор регуляризации L2 на основе настроек, заданных с trainingOptions
функция.
Управлять значением фактора регуляризации L2 для четырех отдельных матриц в RecurrentWeights
, задайте вектор 1 на 4. Записи RecurrentWeightsL2Factor
соответствуйте фактору регуляризации L2 следующего:
Введите логический элемент
Забудьте логический элемент
Кандидат ячейки
Выведите логический элемент
Чтобы задать то же значение для всех матриц, задайте неотрицательный скаляр.
Пример 2
Пример:
[1 2 1 1]
BiasL2Factor
— Фактор регуляризации L2 для смещенийФактор регуляризации L2 для смещений в виде неотрицательного скаляра или числового вектора 1 на 4.
Программное обеспечение умножает этот фактор на глобальный фактор регуляризации L2, чтобы определить регуляризацию L2 для смещений в этом слое. Например, если BiasL2Factor
2
, затем регуляризация L2 для смещений в этом слое является дважды глобальным фактором регуляризации L2. Можно задать глобальный фактор регуляризации L2 использование trainingOptions
функция.
Управлять значением фактора регуляризации L2 для четырех отдельных векторов в Bias
, задайте вектор 1 на 4. Записи BiasL2Factor
соответствуйте фактору регуляризации L2 следующего:
Введите логический элемент
Забудьте логический элемент
Кандидат ячейки
Выведите логический элемент
Чтобы задать то же значение для всех векторов, задайте неотрицательный скаляр.
Пример 2
Пример:
[1 2 1 1]
Name
— Имя слоя''
(значение по умолчанию) | вектор символов | строковый скаляр
Имя слоя в виде вектора символов или строкового скаляра. Для Layer
вход массивов, trainNetwork
, assembleNetwork
, layerGraph
, и dlnetwork
функции автоматически присваивают имена к слоям с Name
установите на ''
.
Типы данных: char |
string
NumInputs
— Количество входных параметров
| 3
Количество входных параметров слоя.
Если HasStateInputs
свойством является 0
(FALSE), затем слой имеет вход того с именем 'in'
, который соответствует входным данным. В этом случае слой использует HiddenState
и CellState
свойства для операции слоя.
Если HasStateInputs
свойством является 1
(TRUE), затем слой имеет три входных параметров с именами 'in'
скрытый
, и 'cell'
, которые соответствуют входным данным, скрытому состоянию и состоянию ячейки соответственно. В этом случае слой использует значения, переданные этим входным параметрам для операции слоя. Если HasStateInputs
1
(TRUE), затем HiddenState
и CellState
свойства должны быть пустыми.
Типы данных: double
InputNames
— Введите имена{'in'}
| {'in','hidden','cell'}
Введите имена слоя.
Если HasStateInputs
свойством является 0
(FALSE), затем слой имеет вход того с именем 'in'
, который соответствует входным данным. В этом случае слой использует HiddenState
и CellState
свойства для операции слоя.
Если HasStateInputs
свойством является 1
(TRUE), затем слой имеет три входных параметров с именами 'in'
скрытый
, и 'cell'
, которые соответствуют входным данным, скрытому состоянию и состоянию ячейки соответственно. В этом случае слой использует значения, переданные этим входным параметрам для операции слоя. Если HasStateInputs
1
(TRUE), затем HiddenState
и CellState
свойства должны быть пустыми.
NumOutputs
— Количество выходных параметров
| 3
Количество выходных параметров слоя.
Если HasStateOutputs
свойством является 0
(FALSE), затем слой имеет тот выход с именем 'out'
, который соответствует выходным данным.
Если HasStateOutputs
свойством является 1
(TRUE), затем слой имеет три выходных параметров с именами 'out'
скрытый
, и 'cell'
, которые соответствуют выходным данным, скрытому состоянию и состоянию ячейки, соответственно. В этом случае слой также выводит значения состояния, вычисленные во время операции слоя.
Типы данных: double
OutputNames
— Выведите имена{'out'}
| {'out','hidden','cell'}
Выведите имена слоя.
Если HasStateOutputs
свойством является 0
(FALSE), затем слой имеет тот выход с именем 'out'
, который соответствует выходным данным.
Если HasStateOutputs
свойством является 1
(TRUE), затем слой имеет три выходных параметров с именами 'out'
скрытый
, и 'cell'
, которые соответствуют выходным данным, скрытому состоянию и состоянию ячейки, соответственно. В этом случае слой также выводит значения состояния, вычисленные во время операции слоя.
Создайте слой LSTM с именем 'lstm1'
и 100 скрытых модулей.
layer = lstmLayer(100,'Name','lstm1')
layer = LSTMLayer with properties: Name: 'lstm1' InputNames: {'in'} OutputNames: {'out'} NumInputs: 1 NumOutputs: 1 HasStateInputs: 0 HasStateOutputs: 0 Hyperparameters InputSize: 'auto' NumHiddenUnits: 100 OutputMode: 'sequence' StateActivationFunction: 'tanh' GateActivationFunction: 'sigmoid' Learnable Parameters InputWeights: [] RecurrentWeights: [] Bias: [] State Parameters HiddenState: [] CellState: [] Show all properties
Включайте слой LSTM в Layer
массив.
inputSize = 12;
numHiddenUnits = 100;
numClasses = 9;
layers = [ ...
sequenceInputLayer(inputSize)
lstmLayer(numHiddenUnits)
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer]
layers = 5x1 Layer array with layers: 1 '' Sequence Input Sequence input with 12 dimensions 2 '' LSTM LSTM with 100 hidden units 3 '' Fully Connected 9 fully connected layer 4 '' Softmax softmax 5 '' Classification Output crossentropyex
Обучите сеть LSTM глубокого обучения для классификации последовательностей к метке.
Загрузите японский набор данных Гласных как описано в [1] и [2]. XTrain
массив ячеек, содержащий 270 последовательностей различной длины с 12 функциями, соответствующими коэффициентам кепстра LPC. Y
категориальный вектор из меток 1,2..., 9. Записи в XTrain
матрицы с 12 строками (одна строка для каждого признака) и различным количеством столбцов (один столбец для каждого временного шага).
[XTrain,YTrain] = japaneseVowelsTrainData;
Визуализируйте первые временные ряды в графике. Каждая линия соответствует функции.
figure plot(XTrain{1}') title("Training Observation 1") numFeatures = size(XTrain{1},1); legend("Feature " + string(1:numFeatures),'Location','northeastoutside')
Задайте архитектуру сети LSTM. Задайте входной размер как 12 (количество функций входных данных). Задайте слой LSTM, чтобы иметь 100 скрытых модулей и вывести последний элемент последовательности. Наконец, задайте девять классов включением полносвязного слоя размера 9, сопровождаемый softmax слоем и слоем классификации.
inputSize = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(inputSize) lstmLayer(numHiddenUnits,'OutputMode','last') fullyConnectedLayer(numClasses) softmaxLayer classificationLayer]
layers = 5x1 Layer array with layers: 1 '' Sequence Input Sequence input with 12 dimensions 2 '' LSTM LSTM with 100 hidden units 3 '' Fully Connected 9 fully connected layer 4 '' Softmax softmax 5 '' Classification Output crossentropyex
Задайте опции обучения. Задайте решатель как 'adam'
и 'GradientThreshold'
как 1. Установите мини-пакетный размер на 27 и определите максимальный номер эпох к 70.
Поскольку мини-пакеты малы с короткими последовательностями, центральный процессор лучше подходит для обучения. Установите 'ExecutionEnvironment'
к 'cpu'
. Чтобы обучаться на графическом процессоре, при наличии, устанавливает 'ExecutionEnvironment'
к 'auto'
(значение по умолчанию).
maxEpochs = 70; miniBatchSize = 27; options = trainingOptions('adam', ... 'ExecutionEnvironment','cpu', ... 'MaxEpochs',maxEpochs, ... 'MiniBatchSize',miniBatchSize, ... 'GradientThreshold',1, ... 'Verbose',false, ... 'Plots','training-progress');
Обучите сеть LSTM с заданными опциями обучения.
net = trainNetwork(XTrain,YTrain,layers,options);
Загрузите набор тестов и классифицируйте последовательности в динамики.
[XTest,YTest] = japaneseVowelsTestData;
Классифицируйте тестовые данные. Задайте тот же мини-пакетный размер, используемый для обучения.
YPred = classify(net,XTest,'MiniBatchSize',miniBatchSize);
Вычислите точность классификации предсказаний.
acc = sum(YPred == YTest)./numel(YTest)
acc = 0.9541
Чтобы создать сеть LSTM для классификации последовательностей к метке, создайте массив слоя, содержащий входной слой последовательности, слой LSTM, полносвязный слой, softmax слой и классификацию выходной слой.
Установите размер входного слоя последовательности к количеству функций входных данных. Установите размер полносвязного слоя к количеству классов. Вы не должны задавать длину последовательности.
Для слоя LSTM задайте количество скрытых модулей и режима вывода 'last'
.
numFeatures = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,'OutputMode','last') fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
Для примера, показывающего, как обучить сеть LSTM для классификации последовательностей к метке и классифицировать новые данные, смотрите, что Классификация Последовательностей Использует Глубокое обучение.
Чтобы создать сеть LSTM для классификации от последовательности к последовательности, используйте ту же архитектуру что касается классификации последовательностей к метке, но установите режим вывода слоя LSTM к 'sequence'
.
numFeatures = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,'OutputMode','sequence') fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
Чтобы создать сеть LSTM для sequence-one регрессии, создайте массив слоя, содержащий входной слой последовательности, слой LSTM, полносвязный слой и регрессию выходной слой.
Установите размер входного слоя последовательности к количеству функций входных данных. Установите размер полносвязного слоя к количеству ответов. Вы не должны задавать длину последовательности.
Для слоя LSTM задайте количество скрытых модулей и режима вывода 'last'
.
numFeatures = 12; numHiddenUnits = 125; numResponses = 1; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,'OutputMode','last') fullyConnectedLayer(numResponses) regressionLayer];
Чтобы создать сеть LSTM для регрессии от последовательности к последовательности, используйте ту же архитектуру что касается sequence-one регрессии, но установите режим вывода слоя LSTM к 'sequence'
.
numFeatures = 12; numHiddenUnits = 125; numResponses = 1; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,'OutputMode','sequence') fullyConnectedLayer(numResponses) regressionLayer];
Для примера, показывающего, как обучить сеть LSTM для регрессии от последовательности к последовательности и предсказать на новых данных, смотрите, что Регрессия От последовательности к последовательности Использует Глубокое обучение.
Можно сделать сети LSTM глубже путем вставки дополнительных слоев LSTM с режимом вывода 'sequence'
перед слоем LSTM. Чтобы предотвратить сверхподбор кривой, можно вставить слои уволенного после слоев LSTM.
Для сетей классификации последовательностей к метке режимом вывода последнего слоя LSTM должен быть 'last'
.
numFeatures = 12; numHiddenUnits1 = 125; numHiddenUnits2 = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits1,'OutputMode','sequence') dropoutLayer(0.2) lstmLayer(numHiddenUnits2,'OutputMode','last') dropoutLayer(0.2) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
Для сетей классификации от последовательности к последовательности режимом вывода последнего слоя LSTM должен быть 'sequence'
.
numFeatures = 12; numHiddenUnits1 = 125; numHiddenUnits2 = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits1,'OutputMode','sequence') dropoutLayer(0.2) lstmLayer(numHiddenUnits2,'OutputMode','sequence') dropoutLayer(0.2) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
Слой LSTM изучает долгосрочные зависимости между временными шагами в данных о последовательности и временных рядах.
Состояние слоя состоит из скрытого состояния (также известный как состояние вывода) и состояния ячейки. Скрытое состояние на временном шаге t содержит выход слоя LSTM для этого временного шага. Состояние ячейки содержит информацию, усвоенную из предыдущих временных шагов. На каждом временном шаге слой добавляет информацию в или удаляет информацию из состояния ячейки. Слой управляет этими обновлениями с помощью логических элементов.
Следующие компоненты управляют ячейкой и скрытое состояние состояния слоя.
Компонент | Цель |
---|---|
Введите логический элемент (i) | Управляйте уровнем обновления состояния ячейки |
Забудьте логический элемент (f) | Уровень управления сброса состояния ячейки (забывает) |
Кандидат ячейки (g) | Добавьте информацию в состояние ячейки |
Выведите логический элемент (o) | Управляйте уровнем состояния ячейки, добавленного к скрытому состоянию |
Эта схема иллюстрирует поток данных на временном шаге t. Подсветки схемы, как логические элементы забывают, обновляются и выводят ячейку и скрытые состояния.
learnable веса слоя LSTM являются входными весами W (InputWeights
), текущие веса R (RecurrentWeights
), и смещение b (Bias
). Матрицы W, R и b являются конкатенациями входных весов, текущих весов и смещения каждого компонента, соответственно. Эти матрицы конкатенированы можно следующим образом:
где i, f, g и o обозначают входной логический элемент, забывают логический элемент, кандидата ячейки, и выводят логический элемент, соответственно.
Состоянием ячейки на временном шаге t дают
где обозначает продукт Адамара (поэлементное умножение векторов).
Скрытым состоянием на временном шаге t дают
где обозначает функцию активации состояния. lstmLayer
функция, по умолчанию, использует гиперболическую функцию тангенса (tanh), чтобы вычислить функцию активации состояния.
Следующие формулы описывают компоненты на временном шаге t.
Компонент | Формула |
---|---|
Введите логический элемент | |
Забудьте логический элемент | |
Кандидат ячейки | |
Выведите логический элемент |
В этих вычислениях, обозначает функцию активации логического элемента. lstmLayer
функция, по умолчанию, использует сигмоидальную функцию, данную вычислить функцию активации логического элемента.
Слои в массиве слоя или графике слоев передают данные, заданные как отформатированный dlarray
объекты.
Можно взаимодействовать с ними dlarray
объекты в автоматических рабочих процессах дифференцирования таких, разрабатывая пользовательский слой, с помощью functionLayer
объект или использование forward
и predict
функции с dlnetwork
объекты.
Эта таблица показывает поддерживаемые форматы ввода LSTMLayer
возразите и соответствующий выходной формат. Если выход слоя передается пользовательскому слою, который не наследовался nnet.layer.Formattable
класс или FunctionLayer
объект с Formattable
набор опции к false
, затем слой получает бесформатный dlarray
объект с размерностями, упорядоченными, соответствуя форматам, обрисован в общих чертах в этой таблице.
'InputFormat' | OutputMode | 'OutputFormat' |
---|---|---|
| "sequence" |
|
"last" |
|
В dlnetwork
объекты, LSTMLayer
объекты также поддерживают следующие комбинации формата ввода и вывода.
'InputFormat' | OutputMode | 'OutputFormat' |
---|---|---|
| "sequence" |
|
"last" |
| |
| "sequence" |
|
"last" |
| |
| "sequence" |
|
"last" |
|
Использовать эти форматы ввода в trainNetwork
рабочие процессы, сначала преобразуйте данные в "CBT"
(образуйте канал, обработайте в пакетном режиме, время), формат с помощью flattenLayer
.
Если HasStateInputs
свойством является 1
(TRUE), затем слой имеет два дополнительных входных параметров с именами 'hidden'
и 'cell'
, которые соответствуют скрытому состоянию и состоянию ячейки, соответственно. Эти дополнительные входные параметры ожидают формат ввода "CB"
(образуйте канал, пакет).
Если HasStateOutputs
свойством является 1
(TRUE), затем слой имеет два дополнительных выходных параметров с именами 'hidden'
и 'cell'
, которые соответствуют скрытому состоянию и состоянию ячейки, соответственно. Эти дополнительные выходные параметры имеют выходной формат "CB"
(образуйте канал, пакет).
Поведение изменяется в R2019a
Начиная в R2019a, программное обеспечение, по умолчанию, инициализирует входные веса слоя этого слоя с помощью инициализатора Glorot. Это поведение помогает стабилизировать обучение и обычно уменьшает учебное время глубоких сетей.
В предыдущих релизах программное обеспечение, по умолчанию, инициализирует входные веса слоя с помощью путем выборки от нормального распределения с нулевым средним значением и отклонением 0.01. Чтобы воспроизвести это поведение, установите 'InputWeightsInitializer'
опция слоя к 'narrow-normal'
.
Поведение изменяется в R2019a
Начиная в R2019a, программное обеспечение, по умолчанию, инициализирует слой текущие веса этого слоя с Q, ортогональная матрица, данная разложением QR Z = Q R для случайного матричного Z, произведенного от модульного нормального распределения. Это поведение помогает стабилизировать обучение и обычно уменьшает учебное время глубоких сетей.
В предыдущих релизах программное обеспечение, по умолчанию, инициализирует слой текущие веса с помощью путем выборки от нормального распределения с нулевым средним значением и отклонением 0.01. Чтобы воспроизвести это поведение, установите 'RecurrentWeightsInitializer'
опция слоя к 'narrow-normal'
.
[1] М. Кудо, J. Тояма, и М. Шимбо. "Многомерная Классификация Кривых Используя Прохождение через области". Буквы Распознавания образов. Издание 20, № 11-13, страницы 1103-1111.
[2] Репозиторий Машинного обучения UCI: японский Набор данных Гласных. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
[3] Hochreiter, S, и Дж. Шмидхубер, 1997. Долгая краткосрочная память. Нейронный расчет, 9 (8), pp.1735–1780.
[4] Glorot, Ксавьер и Иосуа Бенхио. "Изучая Трудность Учебных Глубоких Нейронных сетей Прямого распространения". В Продолжениях Тринадцатой Международной конференции по вопросам Искусственного интеллекта и Статистики, 249–356. Сардиния, Италия: AISTATS, 2010.
[5] Он, Kaiming, Сянюй Чжан, Шаоцин Жэнь и Цзянь Сунь. "Копаясь Глубоко в Выпрямителях: Превышение Эффективности Человеческого Уровня на Классификации ImageNet". В Продолжениях 2 015 Международных конференций IEEE по вопросам Компьютерного зрения, 1026–1034. Вашингтон, округ Колумбия: Общество Компьютерного зрения IEEE, 2015.
[6] Saxe, Эндрю М., Джеймс Л. Макклеллэнд и Сурья Гэнгули. "Точные решения нелинейной динамики изучения в глубоких линейных нейронных сетях". arXiv предварительно распечатывают arXiv:1312.6120 (2013).
Указания и ограничения по применению:
При генерации кода с Intel® MKL-DNN:
StateActivationFunction
свойство должно быть установлено в 'tanh'
.
GateActivationFunction
свойство должно быть установлено в 'sigmoid'
.
HasStateInputs
и HasStateOutputs
свойства должны быть установлены в 0
ложь.
Указания и ограничения по применению:
Для генерации кода графического процессора, StateActivationFunction
свойство должно быть установлено в 'tanh'
.
Для генерации кода графического процессора, GateActivationFunction
свойство должно быть установлено в 'sigmoid'
.
HasStateInputs
и HasStateOutputs
свойства должны быть установлены в 0
ложь.
trainingOptions
| trainNetwork
| sequenceInputLayer
| bilstmLayer
| gruLayer
| convolution1dLayer
| maxPooling1dLayer
| averagePooling1dLayer
| globalMaxPooling1dLayer
| globalAveragePooling1dLayer
| Deep Network Designer
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.