如何将tensorflow中的以下嵌入代码传输到pytorch



我在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:使用嵌入层并冻结重量以充当查找表

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)

您可以使用torch.unqueeze

将EMBB张量的尺寸更改为您的需求
  • W1:尺寸(user_vocab_size, embedding_size)
  • 之间(-1,1)之间均匀分布的张量
  • 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)

最新更新