Tensorflow翻译教程修复0.12.1

Tensorflow翻译教程修复0.12.1,tensorflow,Tensorflow,我正在尝试从github上当前的主分支运行tensorflow 0.12.1的翻译教程() 我在这里()对Kangmo建议的seq2seq_model.py进行了更改,但得到了不同的错误 Creating 3 layers of 1024 units. Traceback (most recent call last): File "translate.py", line 317, in <module> tf.app.run() File "/usr/local/

我正在尝试从github上当前的主分支运行tensorflow 0.12.1的翻译教程()

我在这里()对Kangmo建议的seq2seq_model.py进行了更改,但得到了不同的错误

Creating 3 layers of 1024 units.

Traceback (most recent call last):
  File "translate.py", line 317, in <module>
    tf.app.run()
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py", line 44, in run
    _sys.exit(main(_sys.argv[:1] + flags_passthrough))
  File "translate.py", line 314, in main
    train()
  File "translate.py", line 173, in train
    model = create_model(sess, False)
  File "translate.py", line 131, in create_model
    dtype=dtype)
  File "/home/TFRun/seq2seq_model.py", line 171, in __init__
    softmax_loss_function=softmax_loss_function)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", line 1195, in model_with_buckets
    softmax_loss_function=softmax_loss_function))
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", line 1110, in sequence_loss
    softmax_loss_function=softmax_loss_function))
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", line 1067, in sequence_loss_by_example
    crossent = softmax_loss_function(target, logit)
  File "/home/TFRun/seq2seq_model.py", line 111, in sampled_loss
    num_samples, self.target_vocab_size),
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/nn_impl.py", line 1191, in sampled_softmax_loss
    name=name)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/nn_impl.py", line 974, in _compute_sampled_logits
    array_ops.reshape(true_w, new_true_w_shape))
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/math_ops.py", line 357, in multiply
    return gen_math_ops._mul(x, y, name)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_math_ops.py", line 1625, in _mul
    result = _op_def_lib.apply_op("Mul", x=x, y=y, name=name)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/op_def_library.py", line 522, in apply_op
    inferred_from[input_arg.type_attr]))
TypeError: Input 'y' of 'Mul' Op has type float32 that does not match type int32 of argument 'x'.
创建3层1024个单元。
回溯(最近一次呼叫最后一次):
文件“translate.py”,第317行,在
tf.app.run()
文件“/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py”,第44行,正在运行
_系统出口(主(_sys.argv[:1]+标志_passthrough))
文件“translate.py”,第314行,在main中
列车()
列中第173行的文件“translate.py”
模型=创建模型(sess,False)
文件“translate.py”,第131行,在create_模型中
dtype=dtype)
文件“/home/TFRun/seq2seq_model.py”,第171行,在初始化中__
softmax_损耗函数=softmax_损耗函数)
文件“/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/legacy_-seq2seq/python/ops/seq2seq.py”,第1195行,模型中带有
softmax_损耗_函数=softmax_损耗_函数)
文件“/usr/local/lib/python2.7/dist packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py”,第1110行,按顺序
softmax_损耗_函数=softmax_损耗_函数)
文件“/usr/local/lib/python2.7/dist packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py”,第1067行,按示例顺序排列
crossent=软件最大损耗功能(目标,逻辑)
文件“/home/TFRun/seq2seq_model.py”,第111行,在采样损耗中
样本数、自我目标值、声音大小),
文件“/usr/local/lib/python2.7/dist packages/tensorflow/python/ops/nn_impl.py”,第1191行,在sampled_softmax_loss中
名称=名称)
文件“/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/nn_impl.py”,第974行,在计算日志中
数组操作重塑(真的,新的真的形状)
文件“/usr/local/lib/python2.7/dist packages/tensorflow/python/ops/math_ops.py”,第357行,以倍数表示
返回gen\u math\u ops.\u mul(x,y,name)
文件“/usr/local/lib/python2.7/dist packages/tensorflow/python/ops/gen_math_ops.py”,第1625行,in_mul
结果=_op_def_lib.apply_op(“Mul”,x=x,y=y,name=name)
文件“/usr/local/lib/python2.7/dist packages/tensorflow/python/framework/op_def_library.py”,第522行,在apply_op
根据[输入参数类型属性]推断出的属性)
TypeError:“Mul”Op的输入“y”的类型float32与参数“x”的类型int32不匹配。

有人知道修复此错误的方法吗?

您需要将x张量转换为float32,因此在seq2seq_model.py中使用以下代码:

def sampled_loss(inputs,labels):
            inputs= tf.cast(inputs, tf.float32)
            labels = tf.reshape(labels, [-1, 1])
            return tf.cast(tf.nn.sampled_softmax_loss(w_t, b,  labels, inputs,num_samples,
                    self.target_vocab_size),tf.float32)
您还需要更换这一行

crossent = softmax_loss_function(target, logit)

在seq2seq.py的内部

crossent = softmax_loss_function(logit, target)