Що таке гаряче кодування в tensorflow?


11

Зараз я проходжу курс з tensorflow, в якому вони використовували tf.one_hot (індекси, глибина). Тепер я не розумію, як ці індекси змінюються на цю двійкову послідовність.

Може хтось, будь ласка, пояснить мені точний процес ???

Відповіді:


14

Припустимо, у вашому наборі даних є категорична особливість (наприклад, колір). І ваші зразки можуть бути червоними, жовтими або синіми. Для того, щоб передати цей аргумент алгоритму ML, спочатку потрібно його кодувати так, щоб замість рядків у вас були числа.

Найпростіший спосіб зробити таке - створити зіставлення, де:

червоний -> 1
жовтий -> 2
синій -> 3

і замініть кожен рядок на його відображене значення.

Однак це може створити небажані побічні ефекти в нашій моделі ML, оскільки при роботі з номерами може здатися, що синій> жовтий (тому що 3> 2) або червоний + жовтий = синій (тому що 1 + 2 = 3). Модель не може знати, що ці дані були категоричними і потім були відображені як цілі числа.

Рішення цієї проблеми - однокольорове кодування, де ми створюємо N нових функцій , де N - кількість унікальних значень у вихідній функції. У нашому іспиті N було б дорівнює 3, оскільки у нас є 3 унікальних кольори (червоний, жовтий та синій).

Кожна з цих особливостей є двійковою і відповідатиме одному з цих унікальних значень. У нашому прикладі перша особливість буде двійковою ознакою, яка повідомляє нам, чи є цей зразок червоним чи ні, другий - це те ж саме для жовтого, а третій для синього.

Приклад такого перетворення проілюстрований нижче:

Зауважте, що оскільки цей підхід збільшує розмірність набору даних, якщо у нас є функція, яка приймає багато унікальних значень, ми можемо захотіти використовувати більш розріджене кодування (як те, яке я представив вище).


3

глибина: скаляр, що визначає глибину одного гарячого виміру.

індекси: Тензор індексів.

Цей приклад наведено в документації на тензорфлоу.
1. Тільки Вказівки індексів та глибини (Значення за замовчуванням для значення_-значення становить 1, а значення значення-значення 0)

 indices = [0, 1, 2]
    depth = 3
    tf.one_hot(indices, depth)  # output: [3 x 3]
    # [[1., 0., 0.],
    #  [0., 1., 0.],
    #  [0., 0., 1.]]
  1. Вказівка ​​значення "значення" та "значення"
індекси = [0, 2, -1, 1]
глибина = 3
tf.one_hot (індекси, глибина, значення_ 5,0, значення значення = 0,0, вісь = -1)
## вихід: [4 x 3]
    # [[5.0, 0.0, 0.0], # one_hot (0)
    # [0,0, 0,0, 5,0], # one_hot (2)
    # [0,0, 0,0, 0,0], # one_hot (-1)
    # [0,0, 5,0, 0,0]] # one_hot (1)

Ви також можете побачити код на GitHub


Документ tf є більш зрозумілим: tensorflow.org/api_docs/python/tf/one_hot
dturvene
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.