应用于张量的Tensorflow/Keras嵌入层

2024-09-28 20:53:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个tensorflow模型,它将整数列表作为输入,并返回相应的预训练嵌入

例如,如果输入批为[[1, 2, 3], [4, 5, 6]],我希望模型返回 [[embed[1], embed[2], embed[3]], [embed[4], embed[5], embed[6]],其中embed是包含预训练嵌入的矩阵

我想我能够用预先训练好的嵌入创建一个嵌入层,但是我的代码只返回一个嵌入

embedding_dim = 5
vocab_size = 100

embedding_matrix = np.random.random((vocab_size, embedding_dim))

emb_model = tf.keras.Sequential()
embedder = tf.keras.layers.Embedding(vocab_size, 
                                     embedding_dim,
                                     embeddings_initializer=tf.keras.initializers.Constant(embedding_matrix),
                                     trainable=False,
                                     input_shape=(None,))
emb_model.add(embedder)

例如,如果我执行emb_model([[[8, 2, 7], [2, 8, 4]]]),则只返回第8项的嵌入


Tags: 模型sizemodeltftensorflow整数randomembed
1条回答
网友
1楼 · 发布于 2024-09-28 20:53:23

这是正确的方法

embedding_dim = 5
vocab_size = 100
test = np.asarray([[1, 2, 3], 
                   [4, 5, 6]])

embedding_matrix = np.random.uniform(-1,1, (vocab_size,embedding_dim))

emb_model = tf.keras.Sequential()
embedder = tf.keras.layers.Embedding(vocab_size, 
                                     embedding_dim,
                                     trainable=False,
                                     weights=[embedding_matrix],
                                     input_shape=(None,))
emb_model.add(embedder)

emb_model(test)

我们初始化一个权重矩阵并将其插入模型weights=[embedding_matrix]设置trainable=False

此时,我们可以通过感兴趣的ID直接计算预测

结果是一个dim数组(n_批处理、n_令牌、嵌入_dim)

相关问题 更多 >