Встраивайте дискретные данные
Операция embed преобразует числовые индексы в числовые векторы, где индексы соответствуют дискретным данным. Используйте вложения для сопоставления дискретных данных, таких как категориальные значения или слова, с числовыми векторами.
Примечание
Эта функция применяет операцию встраивания к dlarray
данные. Если необходимо применить операцию встраивания в layerGraph
объект или Layer
массив, используйте wordEmbeddingLayer
(Symbolic Math Toolbox) объект.
Встройте мини-пакет категориальных функций.
Создайте массив категориальных функций, содержащих 5 наблюдений со значениями "Male"
или "Female"
.
X = categorical(["Male" "Female" "Male" "Female" "Female"])';
Инициализируйте веса встраивания. Задайте размерность встраивания 10 и словарь, соответствующий количеству категорий входных данных плюс один.
embeddingDimension = 10; vocabularySize = numel(categories(X)); weights = rand(embeddingDimension,vocabularySize+1);
Чтобы встраивать категориальные данные, сначала преобразуйте их в мини-пакет числовых индексов.
X = double(X)
X = 5×1
2
1
2
1
1
Для форматированных dlarray
вход, функция встраивания расширяется в синглтон 'C'
(канальная) размерность с размером 1. Создайте форматированный dlarray
объект, содержащий данные. Чтобы указать, что строки соответствуют наблюдениям, задайте формат 'BC'
(пакет, канал).
dlX = dlarray(X,'BC')
dlX = 1(C) x 5(B) dlarray 2 1 2 1 1
Встройте числовые индексы с помощью embed
функция. Функция embed расширяется в 'C'
размерность.
dlY = embed(dlX,weights)
dlY = 10(C) x 5(B) dlarray 0.1576 0.8147 0.1576 0.8147 0.8147 0.9706 0.9058 0.9706 0.9058 0.9058 0.9572 0.1270 0.9572 0.1270 0.1270 0.4854 0.9134 0.4854 0.9134 0.9134 0.8003 0.6324 0.8003 0.6324 0.6324 0.1419 0.0975 0.1419 0.0975 0.0975 0.4218 0.2785 0.4218 0.2785 0.2785 0.9157 0.5469 0.9157 0.5469 0.5469 0.7922 0.9575 0.7922 0.9575 0.9575 0.9595 0.9649 0.9595 0.9649 0.9649
В этом случае выход является embeddingDimension
-by- N
матрица с форматом 'CB'
(канал, пакет), где N
количество наблюдений. Каждый столбец содержит векторы встраивания.
Встройте мини-пакет текстовых данных.
textData = [ "Items are occasionally getting stuck in the scanner spools." "Loud rattling and banging sounds are coming from assembler pistons."];
Создайте массив токенизированных документов.
documents = tokenizedDocument(textData);
Чтобы кодировать текстовые данные как последовательности числовых индексов, создайте wordEncoding
объект.
enc = wordEncoding(documents);
Инициализируйте веса встраивания. Задайте размерность встраивания 100 и размер словаря, чтобы соответствовать размеру словаря, соответствующему количеству слов в кодировке слова плюс единица.
embeddingDimension = 100; vocabularySize = enc.NumWords; weights = rand(embeddingDimension,vocabularySize+1);
Преобразуйте токенизированные документы в последовательности векторов слов с помощью doc2sequence
функция. The doc2sequence
функция по умолчанию отбрасывает из словаря лексемы во входных данных. Чтобы сопоставить ненужные лексемы с последним вектором весов встраивания, установите 'UnknownWord'
опция для 'nan'
. The doc2sequence
функция по умолчанию заполняет последовательности входа нулями так, чтобы они имели одинаковую длину
sequences = doc2sequence(enc,documents,'UnknownWord','nan')
sequences=2×1 cell array
{[ 0 1 2 3 4 5 6 7 8 9 10]}
{[11 12 13 14 15 2 16 17 18 19 10]}
Выходы представляют собой массив ячеек, где каждый элемент соответствует наблюдению. Каждый элемент является вектором-строкой с элементами, представляющими отдельные лексемы в соответствующем наблюдении, включая значения заполнения.
Преобразуйте массив ячеек в числовой массив путем вертикального конкатенирования строк.
X = cat(1,sequences{:})
X = 2×11
0 1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 2 16 17 18 19 10
Преобразуйте числовые индексы в dlarray
. Потому что строки и столбцы X
соответствуют наблюдениям и временным шагам, соответственно, задают формат 'BT'
.
dlX = dlarray(X,'BT')
dlX = 2(B) x 11(T) dlarray 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 2 16 17 18 19 10
Встройте числовые индексы с помощью embed
функция. The embed
функция преобразует лексемы заполнения (лексемы с индексом 0) и любые другие лексемы вне словаря в тот же вектор встраивания вне словаря.
dlY = embed(dlX,weights);
В этом случае выход является embeddingDimension
-by- N
-by- S
матрица с форматом 'CBT'
, где N
и S
количество наблюдений и количество временных шагов, соответственно. Векторная dlY(:,n,t)
соответствует вектору вложения временного шага t
наблюдений n
.
dlX
- Входные данныеdlarray
объект | числовой массивВходные данные, заданные как dlarray
объект с метками размерностей или без них, или числовой массив. Элементы dlX
должны быть неотрицательными целыми числами или NaN
.
Функция возвращает векторы встраивания в weights
соответствует числовым индексам в dlX
. Если какие-либо значения в dlX
нули, NaN
или больше, чем размер словаря, тогда функция возвращает вектор из словаря для этого элемента.
Когда dlX
не является форматированным dlarray
объект, вы должны задать формат метки размерности используя 'DataFormat'
опция. Кроме того, если dlX
является числовым массивом, затем weights
должен быть dlarray
объект.
Операция встраивания расширяется в синглтонный канал размерности входных данных, заданных 'C'
размерность. Если данные не имеют заданной размерности канала, то функция принимает неопределенную размерность синглтонного канала.
weights
- Веса встраиванияdlarray
объект | числовой массивВеса встраивания, заданные как dlarray
объект с метками размерностей или без них или числовой массив.
Матрица weights
задает размерность встраивания, размер словаря и векторы встраивания.
Размерность встраивания - это количество компонентов K
встраивания. То есть встраивание преобразует числовые индексы в векторы длины K
. Размер словаря - это количество дискретных элементов V
в встраивание. То есть количество дискретных элементов базовых данных, которые поддерживает встраивание. Встраивание отображает индексы из словаря на тот же вектор встраивания из словаря.
Если weights
является форматированным dlarray
объект, тогда он должен иметь формат 'CU'
или 'UC'
. Значение размерностей, соответствующее меткам 'C'
и 'U'
должен иметь размер K
и V
+ 1, соответственно, где K
и V
представление размерности встраивания и размера словаря, соответственно. Дополнительный вектор соответствует внешнему вектору вложения словаря.
Если weights
не является форматированным dlarray
объект, затем weights
должен быть K
-by- (V
+ 1) матрица, где K
и V
представление размерности встраивания и размера словаря, соответственно.
Функция возвращает векторы встраивания в weights
соответствует числовым индексам в dlX
. Если какие-либо значения в dlX
нули, NaN
или больше, чем размер словаря, тогда функция возвращает вектор из словаря для этого элемента.
FMT
- Размерность неформатированных данныхРазмерность неформатированных входных данных, заданный как разделенная разделенными запятой парами, состоящая из 'DataFormat'
и символьный массив или строка FMT
который обеспечивает метку для каждой размерности данных. Каждый символ в FMT
должно быть одно из следующих:
'S'
- Пространственный
'C'
- Канал
'B'
- Партия (например, выборки и наблюдения)
'T'
- Время (например, последовательности)
'U'
- Не определено
Можно задать несколько размерности, маркированных 'S'
или 'U'
. Можно использовать метки 'C'
, 'B'
, и 'T'
самое большее сразу.
Вы должны задать 'DataFormat',FMT
когда входные данные dlX
не является форматированным dlarray
.
Пример: 'DataFormat','SSCB'
Типы данных: char
| string
dlY
- Векторы встраиванияdlarray
Векторы встраивания, возвращенные как dlarray
объект. Область выхода dlY
имеет тот же базовый тип данных, что и входной dlX
.
Функция возвращает векторы встраивания в weights
соответствует числовым индексам в dlX
. Если какие-либо значения в dlX
нули, NaN
или больше, чем размер словаря, тогда функция возвращает вектор из словаря для этого элемента.
Векторы встраивания имеют K
элементы, где K
- размерность встраивания. Размер размерностей dlY
зависят от входных данных:
Если dlX
является форматированным dlarray
с 'C'
метка размера, затем операция встраивания расширяется в эту размерность. То есть выход имеет те же метки размерности, что и вход, 'C'
размерность имеет размер K
другие размерности имеют тот же размер, что и соответствующие размерности входов.
Если dlX
является форматированным dlarray
без 'C'
размерность. Затем операция принимает синглтонную размерность канала. Выход имеет 'C'
размерность и все другие размерности имеют одинаковый размер и метки. То есть выход имеет те же метки размерности, что и вход, а также 'C'
размерность, 'C'
размерность имеет размер K
другие размерности имеют тот же размер, что и соответствующие размерности входов.
Если dlX
не является форматированным dlarray
объект и 'DataFormat'
содержит 'C'
размерность, затем операция встраивания расширяется в эту размерность. То есть выход имеет количество размерностей как вход, размерность, соответствующее 'C'
размерность имеет размер K
другие размерности имеют тот же размер, что и соответствующие размерности входов.
Если dlX
не является форматированным dlarray
объект и 'DataFormat'
не содержит размерности 'C', тогда операция встраивания вставляет новую размерность в начале. То есть выход имеет еще одну размерность как вход, первую размерность, соответствующее 'C'
размерность имеет размер K
другие размерности имеют тот же размер, что и соответствующие размерности входов.
Указания и ограничения по применению:
Когда по крайней мере один из следующих входных параметров является gpuArray
или dlarray
с базовыми данными типа gpuArray
эта функция выполняется на графическом процессоре.
dlX
weights
Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).
dlarray
| dlfeval
| dlgradient
| lstm
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.