输入' y' of' Mul' Op的类型为float32,与参数' x'的类型int32不匹配。

时间:2017-04-11 06:59:28

标签: python-3.x

当我在Linux上使用此代码时。有用。但在Windows上它并没有。顺便说一下,我的Windows上的python版本是3.5

with graph.as_default():

 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)


with tf.device('/cpu:0'):

 embeddings = tf.Variable(
    tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))
 embed = tf.nn.embedding_lookup(embeddings, train_inputs)


 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]))


loss = tf.reduce_mean(
  tf.nn.nce_loss(nce_weights, nce_biases, embed, train_labels,num_sampled, vocabulary_size))

4 个答案:

答案 0 :(得分:1)

新版本的tensorflow改变了ncs_loss的参数顺序。

尝试更改为

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

答案 1 :(得分:0)

我也遇到了这个错误。代码与您的代码非常相似。 当我在Floydhub上使用env = tensorflow(这意味着在Python3上使用Tensorflow 1.1.0 + Keras 2.0.4)上运行它时,它抛出了上述错误。

然而,在我改变环境以使用tensorflow-1.0(Python3上的Tensorflow 1.0.0 + Keras 1.2.2)后它运行良好。

答案 2 :(得分:0)

您需要将train_labels类型转换为float32。 [您已经提到train_labels的类型为int32,嵌入的类型为float32。]

这是将int32类型转换为float32

的方法
tf.cast(train_labels, tf.float32)

然后计算损失。

答案 3 :(得分:0)

我遇到了同样的问题,但有不同的损失功能。您缺少参数名称,传递参数名称和错误将消失。检查下面的代码行。

    loss = tf.reduce_mean(
                  tf.nn.nce_losss(weights=nce_weights, biases=nce_biases, 
                                  inputs=embed, labels=train_labels, 
                                  num_sampled=num_sampled,
                                  num_classes=vocabulary_size))