Внедрение дискретных данных
Операция встраивания преобразует числовые индексы в числовые векторы, где индексы соответствуют дискретным данным. Встраивание используется для отображения дискретных данных, таких как категориальные значения или слова, в числовые векторы.
Примечание
Эта функция применяет операцию встраивания к dlarray данные. Если требуется применить операцию встраивания в layerGraph объект или Layer массив, используйте wordEmbeddingLayer(Панель инструментов аналитики текста).
Встроить мини-пакет категориальных функций.
Создание массива категориальных элементов, содержащих 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 функция. Функция встраивания расширяется в '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около-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 функция. doc2sequence функция по умолчанию отбрасывает устаревшие маркеры во входных данных. Чтобы отобразить несловарные маркеры на последний вектор встраивания весов, установите 'UnknownWord' опция для 'nan'. 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 функция. embed функция сопоставляет маркеры заполнения (маркеры с индексом 0) и любые другие маркеры вне словаря с тем же самым вектором внесловарного встраивания.
dlY = embed(dlX,weights);
В этом случае выводом является embeddingDimensionоколо-Nоколо-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около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, эта функция выполняется на GPU.
dlX
weights
Дополнительные сведения см. в разделе Запуск функций MATLAB на графическом процессоре (панель инструментов параллельных вычислений).
dlarray | dlfeval | dlgradient | lstm
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.