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

Viewed 857

Can anyone help me solving this error:

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

While I am coding transformers from scratch, i got the msg so I share with you my code:

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 

And this simple example is for testing the code:

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])

This is just for the sake of testing. Otherwise, for more about the error:

---------------------------------------------------------------------------
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. 

Error

1 Answers

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

I don't know why used comma in decoder_inputs might be type error.

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

Related