Tensorflow tf.nn.embedding_lookup

есть ли небольшая нейронная сеть в tf.nn.embedding_lookup?? Когда я обучаю некоторые данные, значение того же индекса меняется. Так это тоже обучено? пока я тренирую свою модель

Я проверил официальный код embedding_lookup, но не вижу никаких tf.Variables для параметра встраивания поезда. Но когда я печатаю все tf.Variables, я могу найти переменную, которая находится в пределах области внедрения.

Спасибо.


person 이준범    schedule 25.11.2017    source источник


Ответы (1)


Да, вложение изучено. Вы можете рассматривать операцию tf.nn.embedding_lookup как более эффективное выполнение следующего матричного умножения:

import tensorflow as tf
import numpy as np

NUM_CATEGORIES, EMBEDDING_SIZE = 5, 3
y = tf.placeholder(name='class_idx', shape=(1,), dtype=tf.int32)

RS = np.random.RandomState(42)
W_em_init = RS.randn(NUM_CATEGORIES, EMBEDDING_SIZE)
W_em = tf.get_variable(name='W_em',
                       initializer=tf.constant_initializer(W_em_init),
                       shape=(NUM_CATEGORIES, EMBEDDING_SIZE))

# Using tf.nn.embedding_lookup
y_em_1 = tf.nn.embedding_lookup(W_em, y)

# Using multiplication
y_one_hot = tf.one_hot(y, depth=NUM_CATEGORIES)
y_em_2 = tf.matmul(y_one_hot, W_em)

sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
sess.run([y_em_1, y_em_2], feed_dict={y: [1.0]})
# [array([[ 1.5230298 , -0.23415338, -0.23413695]], dtype=float32),
#  array([[ 1.5230298 , -0.23415338, -0.23413695]], dtype=float32)]

Переменная W_em будет обучаться точно так же, независимо от того, используете ли вы формулировку y_em_1 или y_em_2; Однако y_em_1, вероятно, будет более эффективным.

person musically_ut    schedule 25.11.2017