Метод 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)