如何让keras为输入矩阵的每一行运行一个Dense层?

uajslkp6  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(101)

我试图建立一个基本的Transformer使用keras注意层。为此,我需要有3个不同的密集层,每个层分别生成键,查询和值矩阵,通过运行每个单词嵌入它们。但似乎没有这样的功能与keras。这是我目前掌握情况

#16 word embeddigs with dimension 64
input = layers.Input(shape=(16,64))

key=layers.Dense(64,activation="relu")(input)
query=layers.Dense(64,activation="relu")(input)
value=layers.Dense(64,activation="relu")(input)
x=layers.Attention()()[key,query,value]

result=layers.Dense(8,activation="sigmoid")(x)

字符串
这个代码的问题是,如果你把一个矩阵输入到一个密集层,它不会逐行处理它,而是计算行之间的点积,然后把它输入到网络中:
注意:如果层的输入具有大于2的秩,则Dense沿着输入的最后一个轴和内核的轴0(使用tf.tensordot)计算输入和内核之间的点积。例如,如果input具有维度(batch_size,d0,d1),则我们创建具有shape(d1,units)的内核,并且内核沿着输入的轴2对shape(1,1,d1)的每个子Tensor进行操作(存在batch_size * d0这样的子Tensor)。在这种情况下,输出将具有shape(batch_size,d0,units)。
那么我如何输入一个矩阵,然后逐行处理它呢?

eoigrqb6

eoigrqb61#

我不理解文档,它确实做到了我想要的,因为内核(参数或神经元之间的连接)乘以输入矩阵,这意味着每一行都计算一个新的行。

相关问题