Как передать следующий код встраивания в tenorflow в pytorch? - PullRequest
0 голосов
/ 13 марта 2019

У меня есть код для встраивания в Tensorflow, как следует

self.input_u = tf.placeholder(tf.int32, [None, user_length], name="input_u")
with tf.name_scope("user_embedding"):
        self.W1 = tf.Variable(
            tf.random_uniform([user_vocab_size, embedding_size], -1.0, 1.0),
            name="W")
        self.embedded_user = tf.nn.embedding_lookup(self.W1, self.input_u)
        self.embedded_users = tf.expand_dims(self.embedded_user, -1)

И я хочу переписать в pytorch, Как это сделать?

1 Ответ

1 голос
/ 13 марта 2019

Метод 1: Используйте слой Embedding и зафиксируйте вес, чтобы он работал в качестве справочной таблицы.

import numpy as np
import torch
# user_vocab_size = 10
# embedding_size = 5
W1 = torch.FloatTensor(np.random.uniform(-1,1,size=(user_vocab_size,embedding_size)))
embedded_user = torch.nn.Embedding(user_vocab_size,embedding_size, _weight=W1)
embedded_user.weight.requires_grad = False
embedded_users = torch.unsqueeze(embedded_user, -1)

# user_length = 5
# batch_size = 4
#input = torch.LongTensor(np.random.randint(0,user_vocab_size,(batch_size,user_length)))
#embb = embedded_user(input)

Вы можете изменить размеры тензора embb в соответствии со своими потребностями, используя torch.unqueeze

  • W1: тензор равномерного распределения между (-1,1) размера (user_vocab_size, embedding_size)
  • embedded_user: это слой внедрения, который использует W1 в качестве векторов внедрения

Метод 2:Использовать встроенный функционал API

input_u = torch.LongTensor(np.random.randint(0,user_vocab_size,(batch_size,user_length)))
embedded_user = torch.nn.functional.embedding(input_u,W1)
embedded_users = torch.unsqueeze(embedded_user, -1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...