pt — это токенизированные векторы размера (64, 79). Для следующего класса PositionalEmbedding.call() выдает ошибку.
Код: Выделить всё
class PositionalEmbedding(tf.keras.layers.Layer):
def __init__(self, vocab_size, d_model):
super().__init__()
self.d_model = d_model
self.embedding = tf.keras.layers.Embedding(vocab_size, d_model, mask_zero=True)
self.pos_encoding = positional_encoding(length=2048, depth=d_model)
def compute_mask(self, *args, **kwargs):
return self.embedding.compute_mask(*args, **kwargs)
def call(self, x):
length = tf.shape(x)[1]
x = self.embedding(x)
# This factor sets the relative scale of the embedding and positonal_encoding.
x *= tf.math.sqrt(tf.cast(self.d_model, tf.float32))
x = x + self.pos_encoding[tf.newaxis, :length, :]
return x
Код: Выделить всё
embed_pt = PositionalEmbedding(vocab_size=tokenizers.pt.get_vocab_size(), d_model=512)
pt_emb = embed_pt(pt)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
in ()
2 embed_en = PositionalEmbedding(vocab_size=tokenizers.en.get_vocab_size(), d_model=512)
3
----> 4 pt_emb = embed_pt(pt)
5 en_emb = embed_en(en)
1 frames
in call(self, x)
11 def call(self, x):
12 length = tf.shape(x)[1]
---> 13 x = self.embedding(x)
14 # This factor sets the relative scale of the embedding and positonal_encoding.
15 x *= tf.math.sqrt(tf.cast(self.d_model, tf.float32))
ValueError: Exception encountered when calling PositionalEmbedding.call().
Invalid dtype:
Arguments received by PositionalEmbedding.call():
• x=tf.Tensor(shape=(64, 70), dtype=int64)
Подробнее здесь: https://stackoverflow.com/questions/784 ... dding-call