当我在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))
答案 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))