gpt4 book ai didi

python - Keras 嵌入层 : how do they work?

转载 作者:太空狗 更新时间:2023-10-29 21:41:52 25 4
gpt4 key购买 nike

我开始使用 Keras 构建神经网络模型。

我有一个分类问题,其中的特征是离散的。为了处理这种情况,标准程序包括使用单热编码转换二进制数组中的离散特征。

然而,对于 Keras,这一步似乎不是必需的,因为可以简单地使用嵌入层来创建这些离散特征的特征向量表示。

这些如何embeddings执行?

我的理解是,如果离散特征 f 可以采用 k 值,那么嵌入层会创建一个包含 k 列的矩阵。每次我收到该特征的值时,比如说 i,在训练阶段,只有 i 矩阵的列会被更新。

我的理解正确吗?

最佳答案

假设您有 N 个不直接具有数学表示的对象。例如单词。

由于神经网络只能处理张量,因此您应该寻找某种方法将这些对象转换为张量。解决方案是在一个巨大的矩阵(嵌入矩阵)中,它将对象的每个索引与其转换为张量相关联。

object_index_1: vector_1
object_index_1: vector_2
...
object_index_n: vector_n

选择特定对象的向量可以通过以下方式转换为矩阵乘积:

enter image description here

其中 v 是确定需要翻译哪个词的单热向量。 M 是嵌入矩阵。

如果我们提出通常的管道,它将是以下内容:

  1. 我们有一个对象列表。
objects = ['cat', 'dog', 'snake', 'dog', 'mouse', 'cat', 'dog', 'snake', 'dog']
  1. 我们将这些对象转换为索引(我们计算唯一对象)。
unique = ['cat', 'dog', 'snake', 'mouse'] # list(set(objects))
objects_index = [0, 1, 2, 1, 3, 0, 1, 2, 1] #map(unique.index, objects)

  1. 我们将这些索引转换为一个热向量(记住索引所在的位置只有一个)
objects_one_hot = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], 
[0, 0 , 0, 1], [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0]] # map(lambda x: [int(i==x) for i in range(len(unique))], objects_index)
#objects_one_hot is matrix is 4x9
  1. 我们创建或使用嵌入矩阵:
#M = matrix of dim x 4 (where dim is the number of dimensions you want the vectors to have). 
#In this case dim=2
M = np.array([[1, 1], [1, 2], [2, 2], [3,3]]).T # or... np.random.rand(2, 4)
#objects_vectors = M * objects_one_hot
objects_vectors = [[1, 1], [1, 2], [2, 2], [1, 2],
[3, 3], [1, 1], [1, 2], [2,2], [1, 2]] # M.dot(np.array(objects_one_hot).T)

通常在同一模型学习期间学习嵌入矩阵,以适应每个对象的最佳向量。我们已经有了对象的数学表示!

如您所见,我们使用了一个热产品,后来又使用了矩阵产品。您真正要做的是获取代表该词的 M 列。

在学习过程中,这个 M 将被调整以改进对象的表示,因此损失会下降。

关于python - Keras 嵌入层 : how do they work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42762849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com