Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Input 'y' of 'Mul' Op has type float32 that does not match type int32 of argument 'x'

Tags:

python-3.x

When I use this code on Linux. It works. But on windows it doesn't. By the way my python version is 3.5 on my windows

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))
like image 719
HanLuo Avatar asked Apr 11 '17 06:04

HanLuo


2 Answers

You need to convert train_labels type to float32. [You already mentioned that train_labels is of type int32 and embed is of type float32.]

This is how you convert int32 type to float32

tf.cast(train_labels, tf.float32)

then calculate the loss.

like image 188
Srikar Reddy Avatar answered Oct 01 '22 02:10

Srikar Reddy


the new version of tensorflow has changed the parameters order of ncs_loss.

try to change as

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

like image 22
feisan Avatar answered Oct 01 '22 01:10

feisan