For example, I have input with shape (1, 1000, 10) (so, src.shape
wil be (1, 1000, 10)
). Then:
- This works
class Model(tf.keras.Model):
def __init__(self):
super(Model, self).__init__()
self.attention1 = tf.keras.layers.MultiHeadAttention(num_heads=20, key_dim=9)
self.dense = tf.keras.layers.Dense(10, activation="softmax")
def call(self, src):
output = self.attention1(src, src)
output = tf.reshape(output, [1, 10000])
output = self.dense(output)
return output
- And this:
class Model(tf.keras.Model):
def __init__(self):
super(Model, self).__init__()
self.attention1 = tf.keras.layers.MultiHeadAttention(num_heads=123, key_dim=17)
self.dense = tf.keras.layers.Dense(10, activation="softmax")
def call(self, src):
output = self.attention1(src, src)
output = tf.reshape(output, [1, 10000])
output = self.dense(output)
return output
So, this layer works with whatever num_heads
and key_dim
but secuence length (i.e. 1000
) should be divisible by num_heads
. WHY? Is it a bug? For example, the same code for Pytorch doesn't work. Also, what is a key_dim
then... Thanks in advance.