Реализация одного горячего кодирования

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

Скажем, например, у меня есть нейронная сеть, которая принимает до 10 букв (без учета регистра) и использует одно горячее кодирование. Каждый вход будет 26-мерным вектором определенного вида для каждой точки. Чтобы закодировать это, я действую так, как будто у меня есть 260 входов, каждый из которых отображает только 1 или 0, или есть какой-то другой стандартный способ реализовать эти 26 размерных векторов?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
846
2

Ответы 2

В вашем случае вам нужно различать разные фреймворки. Я могу говорить о PyTorch, который является моей структурой goto при программировании нейронной сети.

Там одноразовое кодирование для последовательностей обычно выполняется таким образом, чтобы ваша сеть ожидала последовательность индексы. Если взять ваши 10 букв в качестве примера, это может быть последовательность ["a", "b", "c" , ...]
встраиваемый слой будет инициализирован «длиной словаря», то есть количеством различных элементов (num_embeddings), которые ваша сеть может получить - в вашем случае 26. Кроме того, вы можете указать embedding_dim, то есть размер вывода один персонаж. Это уже прошел этап однократного кодирования, так как они обычно нужны только для того, чтобы знать, какое значение связать с этим элементом.

Затем вы скармливаете слою закодированную версию указанной выше строки, которая может выглядеть так: [0,1,2,3, ...]. Предполагая, что последовательность имеет длину 10, он выдаст на выходе [10,embedding_dim], то есть двумерный тензор.

Подводя итог, PyTorch, по сути, позволяет пропустить этот довольно утомительный этап кодирования его как однократного кодирования. В основном это связано с тем, что ваш словарный запас в некоторых случаях может быть довольно большим: рассмотрим, например, системы машинного перевода, в которых у вас может быть более 10 000 слов в вашем словаре. Вместо того, чтобы хранить каждое слово в виде вектора размером 10 000, удобнее использовать единый индекс.

Если это не должно полностью ответить на ваш вопрос (поскольку я, по сути, говорю вам, как это вообще предпочтительно): вместо создания 260-мерного вектора вы снова должны использовать тензор [10,26], в котором каждая строка представляет собой отдельную букву.

Тензор 10x26 (он же матрица) по-прежнему имеет 260 элементов, поэтому ответ на вопрос OP: да, ваша сеть будет иметь 260 входов.

Tamás Zahola 31.08.2018 09:39

Если у вас есть 10 различных элементов (например: a, b .... j OR 1,2 ... 10), которые будут представлены как вектор `` горячего кодирования '' размерности-26, тогда ваши входные данные будут иметь только 10 векторов каждый из которых должен быть представлен 26-мерным вектором. Сделай это:

y = torch.eye(26)      # If you want a tensor for each 'letter' of length 26.
y[torch.arange(0,10)]  #This line gives you 10 one hot-encoding vector each of dimension 26.

Надеюсь, что это помогает немного.

Другие вопросы по теме