到 TensorFlow DType,python,tensorflow,deep-learning,nlp"/>

首页 > 解决方案 > TypeError:无法转换值到 TensorFlow DType

问题描述

谁能帮我解决这个错误:

TypeError:无法将值 <tf.Tensor: shape=(), dtype=int32, numpy=8> 转换为 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. 

错误

标签: pythontensorflowdeep-learningnlp

解决方案


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

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

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


推荐阅读