【问题标题】:Tensorflow/Keras embedding layer applied to a tensor应用于张量的 TensorFlow/Keras 嵌入层
【发布时间】:2020-06-05 14:21:28
【问题描述】:

我想创建一个 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 项的嵌入

【问题讨论】:

  • 如果您认为答案有价值,请不要忘记接受它作为答案;-)

标签: python tensorflow keras embedding


【解决方案1】:

这是正确的做法

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_batch, n_token, embedding_dim) 的数组

【讨论】:

    猜你喜欢
    • 2016-11-29
    • 2017-07-15
    • 2019-04-23
    • 2019-08-29
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    相关资源
    最近更新 更多