【问题标题】:TensorFlow: Reshaping embedding vectors after lookup?TensorFlow:查找后重塑嵌入向量?
【发布时间】:2017-11-26 19:50:23
【问题描述】:

我是第一次使用 TensorFlow,无法理解 embedding_lookup 函数。我有一系列代表单个特征向量的索引,比如说[0,3,2,5]。我想用它们对应的嵌入替换这些索引,所以我将嵌入和索引向量放在embedding_lookup 中。然后它返回一个 4 X n 张量,其中 n 是每个嵌入的长度。我的想法,也许我误解了一些事情,我希望这是一个长度为 4*n 的单行向量,我应该能够通过重塑来完成。

如果我不想发送 embedding_lookup 单个实例的特征索引,而是想向它发送数据集中每个实例的索引,假设每个列表的长度为 4,它将返回一个 m X 4 X n 张量(其中 m 是集合的大小),我想将其重塑为 m X n*4。假设我在这里还没有偏离轨道,我正在使用以下代码执行此操作:

... # Stuff

word_embeddings = tf.Variable(self.word_embeddings, name="embeddings")

feature_ids = tf.placeholder(
    tf.int32, shape=(None, input_size), name="feature_ids")
X = tf.reshape(
    tf.nn.embedding_lookup(word_embeddings, feature_ids), [len(features),-1], name="X")
y = tf.placeholder(tf.int64, shape=(None), name='y')

with tf.name_scope("nn"):
    hidden1 = fully_connected(X, hidden_size1, scope="hidden1")
    hidden2 = fully_connected(hidden1, hidden_size2, scope="hidden2")
    output = fully_connected(hidden2, output_size, activation_fn=None, scope="output")

... # More stuff

但我得到的是以下内容:

Traceback (most recent call last):
  File "....py", line 84, in test
    hidden1 = fully_connected(X, hidden_size1, scope="hidden1")
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/tensorflow/contrib/framework/python/ops/arg_scope.py", line 181, in func_with_args
    return func(*args, **current_args)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/tensorflow/contrib/layers/python/layers/layers.py", line 1469, in fully_connected
    outputs = layer.apply(inputs)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/tensorflow/python/layers/base.py", line 492, in apply
    return self.__call__(inputs, *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/tensorflow/python/layers/base.py", line 434, in __call__
    self.build(input_shapes[0])
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/tensorflow/python/layers/core.py", line 109, in build
    raise ValueError('The last dimension of the inputs to `Dense` '
ValueError: The last dimension of the inputs to `Dense` should be defined. Found `None`.

关于我哪里出错了有什么想法吗?

【问题讨论】:

    标签: python tensorflow word-embedding


    【解决方案1】:

    首先,您应该使用tf.expand_dims 将形状从 (4, n) 扩展为 (m, 4, n)

    并使用tf.transpose 将形状从 (m, 4, n) 更改为 (m, n, 4)。

    在这种情况下,转置函数的 perm 参数将是 [0, 2, 1]

    (转置时不要使用 tf.reshape !!!)

    【讨论】:

      猜你喜欢
      • 2014-01-15
      • 2016-10-20
      • 2016-10-18
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 2020-03-28
      相关资源
      最近更新 更多