Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类型错误:输入';b';属于';马特穆尔';Op的float32类型与参数';a';_Python_Python 2.7_Tensorflow - Fatal编程技术网

Python 类型错误:输入';b';属于';马特穆尔';Op的float32类型与参数';a';

Python 类型错误:输入';b';属于';马特穆尔';Op的float32类型与参数';a';,python,python-2.7,tensorflow,Python,Python 2.7,Tensorflow,我试图遵循word2vec示例,但我遇到了以下错误: TypeError: Input 'b' of 'MatMul' Op has type float32 that does not match type int32 of argument 'a'. 在这条线上 相似性=tf.matmul( tf.cast(有效的_嵌入,tf.int32),tf.cast(规范化的_嵌入,tf.int32),transpose_b=True) 这是全部代码: graph = tf.Graph() wit

我试图遵循word2vec示例,但我遇到了以下错误:

TypeError: Input 'b' of 'MatMul' Op has type float32 that does not match type int32 of argument 'a'.
在这条线上

相似性=tf.matmul( tf.cast(有效的_嵌入,tf.int32),tf.cast(规范化的_嵌入,tf.int32),transpose_b=True)

这是全部代码:

graph = tf.Graph()

with graph.as_default():
  # Input data.
  train_inputs = tf.placeholder(tf.int32, shape=[batch_size])
  train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1])
  valid_dataset = tf.constant(valid_examples, dtype=tf.int32)
  # Ops and variables pinned to the CPU because of missing GPU implementation
  with tf.device('/cpu:0'):
    # Look up embeddings for inputs.
    embeddings = tf.Variable(
        tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))
    embed = tf.nn.embedding_lookup(embeddings, train_inputs)
    # Construct the variables for the NCE loss
    nce_weights = tf.Variable(
        tf.truncated_normal([vocabulary_size, embedding_size],
                            stddev=1.0 / math.sqrt(embedding_size)))
    nce_biases = tf.Variable(tf.zeros([vocabulary_size]))
  # Compute the average NCE loss for the batch.
  # tf.nce_loss automatically draws a new sample of the negative labels each
  # time we evaluate the loss.
  loss = tf.reduce_mean(
      tf.nn.nce_loss(nce_weights, nce_biases, embed, train_labels,
                     num_sampled, vocabulary_size))
  # Construct the SGD optimizer using a learning rate of 1.0.
  optimizer = tf.train.GradientDescentOptimizer(1.0).minimize(loss)
  # Compute the cosine similarity between minibatch examples and all embeddings.
  norm = tf.sqrt(tf.reduce_sum(tf.square(embeddings), 1, keep_dims=True))
  normalized_embeddings = embeddings / norm
  valid_embeddings = tf.nn.embedding_lookup(
      normalized_embeddings, valid_dataset)
  similarity = tf.matmul(
      tf.cast(valid_embeddings,tf.int32), tf.cast(normalized_embeddings,tf.int32), transpose_b=True)
  # Add variable initializer.
  init = tf.initialize_all_variables()

我如何解决这个问题?

为什么要在整数空间中进行矩阵乘法?您可能希望将这两个tf.cast都转换为tf.float32。

我在使用Tensorflow r1.4和Python 3.4时遇到了相同的问题

事实上,我认为您需要更改代码

tf.nn.nce_loss(nce_weights, nce_biases, embed, train_labels,
                 num_sampled, vocabulary_size))
进入

同时,您需要将代码更改回

similarity = tf.matmul(valid_embeddings, tf.transpose(normalized_embeddings))
使用
tf.cast(…,tf.int32)
是错误的,实际上,没有必要使用
tf.cast(…,tf.float32)
,因为它已经是tf.float32了

p、 美国

当您在使用
tf.nn.sampled\u softmax\u loss()
时遇到问题时,该解决方案也很有用,因为
sampled\u softmax\u loss()
的用法与
nce\u loss()
非常类似

loss = tf.reduce_mean(tf.nn.nce_loss(
        weights = softmax_weights,
        biases = softmax_biases, 
        inputs = embed, 
        labels = train_labels, 
        num_sampled = num_sampled, 
        num_classes = vocabulary_size))
similarity = tf.matmul(valid_embeddings, tf.transpose(normalized_embeddings))