详解TF中的Embedding操作!

本文详细介绍了TensorFlow(TF1.x和TF2.0)中的Embedding操作,包括什么是embedding、tf1.x中的embedding实现、类似操作如gather和gather_nd、多值离散特征的处理以及如何在神经网络中使用embedding层。通过实例代码展示了embedding_lookup、embedding_lookup_sparse等函数的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

embedding大家都不陌生,在我们的模型中,只要存在离散变量,那么一般都会用到embedding操作。今天这篇,我们将按以下的章节来介绍TF中的embedding操作。

  1. 什么是embedding?
  2. tf1.x中的embedding实现,对比embedding_lookup和matmul
  3. tf1.x中与embedding类似操作,包括gather,gather_nd
  4. tf1.x中多值离散特征处理tf.nn.embedding_lookup_sparse
  5. tf2.0中embedding实现

1、什么是embedding?

先来看看什么是embedding,我们可以简单的理解为,将一个特征转换为一个向量。在推荐系统当中,我们经常会遇到离散特征,如userid、itemid。对于离散特征,我们一般的做法是将其转换为one-hot,但对于itemid这种离散特征,转换成one-hot之后维度非常高,但里面只有一个是1,其余都为0。这种情况下,我们的通常做法就是将其转换为embedding。

embedding的过程是什么样子的呢?它其实就是一层全连接的神经网络,如下图所示:

4155986-a2e35e5b819905ab.png

假设一个特征共有5个取值,也就是说one-hot之后会变成5维,我们想将其转换为embedding表示,其实就是接入了一层全连接神经网络。由于只有一个位置是1,其余位置是0,因此得到的embedding就是与其相连的图中红线上的权重。

接下来,我们来看一下tf1.x中embedding的实现。

2、tf1.x中的embedding实现

在tf1.x中,我们使用embedding_lookup函数来实现emedding,代码如下:

# embedding
embedding = tf.constant(
        [[0.21,0.41,0.51,0.11]],
        [0.22,0.42,0.52,0.12],
        [0.23,0.43,0.53,0.13],
        [0.24,0.44,0.54,0.14]],dtype=tf.float32)

feature_batch = tf.constant([2,3,1,0])

get_embedding1 = tf.nn.embedding_lookup(embedding,feature_batch)

上面的过程为:

4155986-1814d0d26ded8816.png

注意这里的维度的变化,假设我们的feature_batch 是 1维的tensor,长度为4,而embedding的长度为4,那么得到的结果是 4 * 4 的,同理,假设feature_batch是2 *4的,embedding_lookup后的结果是2 * 4 * 4。后面我们在观察结果。

上文说过,embedding层其实是一个全连接神经网络层,那么其过程等价于:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值