【问题标题】:TypeError: Cannot convert value <tf.Tensor: shape=(), dtype=int32, numpy=8> to a TensorFlow DTypeTypeError: 无法将值 <tf.Tensor: shape=(), dtype=int32, numpy=8> 转换为 TensorFlow DType
【发布时间】:2021-09-13 22:39:46
【问题描述】:

谁能帮我解决这个错误:

TypeError: 无法将值 转换为 TensorFlow DType。

当我从头开始编写转换器时,我得到了消息,所以我与你分享我的代码:

class Transformer (tf.keras.Model):
  def __init__(self, vocab_size_encoder, vocab_size_decoder, d_model, n_layers,units, n_head, dropout_rate, name="Transformer"):
    super(Transformer, self).__init__(name=name)
    self.encoder = Encoder(n_layers, units, n_head, dropout_rate, vocab_size_encoder, d_model)
    self.decoder = Encoder(n_layers, units, n_head, dropout_rate, vocab_size_decoder, d_model)
    self.dense_layer = layers.Dense(vocab_size_decoder) 

  def create_padding_mask(self, sequence):
    mask = tf.cast(tf.math.equal(sequence, 0), tf.float32)
    return mask[:, tf.newaxis, tf.newaxis, :]

  def create_look_ahead_mask(self, sequence):
    sequence_length = tf.shape(sequence)[1]
    mask = 1 - tf.linalg.band_part(tf.ones(sequence_length,sequence_length),-1,0)
    return mask 
  
  def call(self, encoder_inputs, decoder_inputs, training):
    encoder_mask = self.create_padding_mask(encoder_inputs)
    decoder_mask1 = self.create_padding_mask(decoder_inputs)
    decoder_mask2 = tf.maximum(
        self.create_padding_mask(decoder_inputs),
        self.create_look_ahead_mask(decoder_inputs))
    encoder_outputs = self.encoder(encoder_inputs,
                                   encoder_mask, 
                                   training)
    decoder_outputs = self.decoder(decoder_inputs,encoder_outputs,decoder_mask2, decoder_mask1, training)
    final_outputs  = self.dense_layer(decoder_outputs)

    return final_outputs 

这个简单的例子是用来测试代码的:

encoder_inputs= tf.constant([[1,5,6,4,3,9,5,2,8],
                           [1,8,7,3,4,5,6,7,2]])
decoder_inputs= tf.constant([[1,4,7,3,5,7,2,8,1],
                           [1,8,2,3,5,6,3,4,2]])

transformer_test = Transformer(vocab_size_encoder=10, 
                               vocab_size_decoder=10, 
                               d_model=9,
                               n_layers=6,
                               units=50,
                               n_head=4, 
                               dropout_rate=0.01)

y = transformer_test(encoder_inputs,
                     decoder_inputs[:,:-1])

这只是为了测试。 否则,有关错误的更多信息:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-15-98be24bcdd5c> in <module>()
      1 y = transformer_test(encoder_inputs,
----> 2                      decoder_inputs[:,:-1])

5 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/dtypes.py in as_dtype(type_value)
    646 
    647   raise TypeError("Cannot convert value %r to a TensorFlow DType." %
--> 648                   (type_value,))

TypeError: Cannot convert value <tf.Tensor: shape=(), dtype=int32, numpy=8> to a TensorFlow DType. 

【问题讨论】:

  • 图像实际上并没有“澄清一切”——整个中间的错误跟踪都丢失了。请发布完整的错误回溯,作为您问题的一部分,而不是图片。
  • @xdurch0 我希望现在很清楚,我编辑了 qst,
  • 你试过把它转换成float32吗?例如:tf.constant([[1,4,7,3,5,7,2,8,1], [1,8,2,3,5,6,3,4,2]],dtype=tf.float32)
  • @Kaveh 是的,我做到了,我得到了同样的错误消息 ..
  • @xdurch0 我明白了,我解决了这个问题.. 在 create_look_ahead_mask 函数中,而不是这个 ``` mask = 1 - tf.linalg.band_part(tf.ones(sequence_length,sequence_length) ,-1,0) ``` 我应该写这个 ``` mask = 1 - tf.linalg.band_part(tf.ones((sequence_length,sequence_length)),-1,0) ``` 这样我得到了一个张量..谢谢你们..

标签: python tensorflow deep-learning nlp


【解决方案1】:

y = transformer_test(encoder_inputs, 解码器输入[:,:-1])

我不知道为什么在decoder_inputs 中使用逗号可能是类型错误。

y = transformer_test(encoder_inputs, decoder_inputs[::-1]) 使用这个

【讨论】:

  • 感谢您的回答,问题已经解决,请检查上面的cmets。否则,解码器是一个示例示例以查看它是否运行,并且“,”表示我们将移动一个,因此它没有句子的结尾标记,因为我们想学习预测结尾句子的...
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 2021-12-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
相关资源
最近更新 更多