РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗pytfSpAtPs 71 of 89 menu
◀ ▶

Позиционные числа в TensorFlow

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

Для каждой позиции берут её номер и для каждой пары соседних осей считают угол через степень десяти тысяч. Чётные индексы заполняют синусом, нечётные - косинусом. Соберём таблицу на четыре шага и шесть осей и выведем её форму:

import tensorflow as tf length = 4 depth = 6 position = tf.range(length, dtype=tf.float32)[:, tf.newaxis] i = tf.range(depth, dtype=tf.float32)[tf.newaxis, :] angle_rates = 1 / tf.pow( 10000.0, (2 * (i // 2)) / tf.cast(depth, tf.float32)) angle_rads = position * angle_rates sines = tf.sin(angle_rads[:, 0::2]) cosines = tf.cos(angle_rads[:, 1::2]) encoding = tf.reshape( tf.stack([sines, cosines], axis=-1), (length, depth)) print(encoding.shape) # выведет (4, 6)

Первый шаг в таблице соответствует нулевому номеру и даёт простой чередующийся ряд. Дальше углы растут вместе с номером позиции. Прибавим таблицу к векторам двух шагов в одной партии:

import tensorflow as tf length = 4 depth = 6 position = tf.range(length, dtype=tf.float32)[:, tf.newaxis] i = tf.range(depth, dtype=tf.float32)[tf.newaxis, :] angle_rates = 1 / tf.pow( 10000.0, (2 * (i // 2)) / tf.cast(depth, tf.float32)) angle_rads = position * angle_rates sines = tf.sin(angle_rads[:, 0::2]) cosines = tf.cos(angle_rads[:, 1::2]) encoding = tf.reshape( tf.stack([sines, cosines], axis=-1), (length, depth)) batch = tf.constant([[[1., 0., 1., 0., 1., 0.], [0., 1., 0., 1., 0., 1.]]]) marked = batch + encoding[:2][tf.newaxis, :, :] print(marked.shape) # выведет (1, 2, 6)

Постройте таблицу позиций на пять шагов и восемь осей. Выведите форму полученного тензора.

Создайте векторы трёх шагов с длиной шесть в одной партии. Прибавьте к ним первые три строки таблицы для четырёх шагов и шести осей и выведите форму суммы.

Для шести позиций и четырёх осей соберите таблицу синусов и косинусов. Выведите длину вектора для шага с номером 2.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить