python - 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.
解决方案
y = transformer_test(encoder_inputs, decoder_inputs[:,:-1])
我不知道为什么decoder_inputs 中使用的逗号可能是类型错误。
y = transformer_test(encoder_inputs, decoder_inputs[::-1]) 使用这个
推荐阅读
- sql - 不能在 MS Access SQL 中使用数字表达式
- python - How to stop youtube-dl download inside a thread using Python 3
- python-2.7 - 从一个列表中删除影响它的副本 [python 2.7]
- angular - 如何在 Rxjs 6 中测试 ngrx 管道选择
- javascript - 在浏览器中使用 JavaScript 编码 API 转换 CP437
- php - 如何在 PHP Mailer 中更改电子邮件发件人电子邮件
- oracle - 如果使用默认配置文件,非活动会话释放多长时间
- javascript - 剑道网格可调整大小问题
- xamarin - Xamarin Forms:在基于 MasterDetail 的项目中通过自定义按钮打开菜单
- powershell - 自动从 AD 组添加/删除用户