快速看懂tf2.0-tf.keras.layersEmbedding()使用方法

tf2.0-tf.keras.layersEmbedding()使用方法

一、什么是Embedding

我们可以简单的理解为,将一个特征转换为一个向量。比如最容易理解的one-hot编码。但在实际应用当中,将特征转换为one-hot编码后维度会十分高。所以我们会将one-hot这种稀疏特征转化为稠密特征,通常做法也就是转化为我们常用的embedding。
在NLP领域中,我们需要将文本转化为电脑所能读懂的语言,也就是把文本语句转化为向量,也就是embedding。

二、tf1.x中Embedding的实现

tf1.x中利用embedding_lookup()函数来实现,具体不再赘述,想知道具体原理及实现请看:
链接:link

三、tf2.0中Embedding的实现及操作实例

tf2.0中不再使用embedding_lookup()来实现embedding,转为使用Embedding()函数实现。需要注意的是:tf.keras.layers.Embbedding()只能作为模型第一层使用。
使用方法:

#vocab_size:字典大小
#embedding_dim:本层的输出大小,也就是生成的embedding的维数
#input_length:输入数据的维数,因为输入数据会做padding处理,所以一般是定义的max_length
keras.layers.Embedding(vocab_size, embedding_dim, input_length = max_length)

以下是文本分类问题所用到的模型,数据使用了imdb影视评论的数据:

imdb = keras.datasets.imdb
vocab_size = 10000
index_from = 3
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=vocab_size, index_from=index_from)

模型结构:

embedding_dim = 16 
batch_size = 128
model = keras.models.Sequential([
# 定义矩阵(vocab_size * embedding_dim), 输出(batch_size, max_length, embedding_dim), 将词表表示的句子转化为embedding
                                 keras.layers.Embedding(vocab_size, embedding_dim, input_length = max_length),
#batch_size*max_length*embedding_dim->batch_size*embedding_dim
                                 keras.layers.GlobalAveragePooling1D(),
                                 keras.layers.Dense(64, activation="relu"),
                                 keras.layers.Dense(1, activation="sigmoid")
])
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
tf.keras.layers.Embedding是一个嵌入层,用于将离散的整数序列转换为密集的低维度向量表示。它的输入是一个二维张量,形状为(batch_size, input_length),输出是一个三维张量,形状为(batch_size, input_length, output_dim)。在该层中,每个整数都会被转换为一个固定长度的向量,向量的维度由output_dim参数指定。 在使用该嵌入层时,你需要指定以下参数: - input_dim:词汇量的大小,也就是你的输入中可能出现的最大整数值加1。 - output_dim:嵌入向量的维度,即每个整数转换后的向量长度。 - embeddings_initializer:嵌入层的初始化方法,默认为均匀分布。 - embeddings_regularizer:嵌入层的正则化方法,默认为无正则化。 - activity_regularizer:嵌入层的正则化方法,默认为无正则化。 - embeddings_constraint:嵌入层的约束方法,默认为无约束。 - mask_zero:是否将0作为一个可学习的特殊标记,用于掩盖输入中的填充值。 - input_length:输入序列的固定长度,用于指定输入张量的形状。 可以通过创建一个Sequential模型,并在其中添加Embedding层来使用tf.keras.layers.Embedding函数。例如,你可以创建一个具有嵌入层、LSTM层和TimeDistributed层的模型,如下所示: ``` model = tf.keras.models.Sequential([ tf.keras.layers.Embedding(input_dim, output_dim), tf.keras.layers.LSTM(output_dim, return_sequences=True), tf.keras.layers.LSTM(output_dim, return_sequences=True), tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(256, activation="softmax")) ]) ``` 其中,input_dim是词汇量的大小,output_dim是嵌入向量的维度。这样的模型可以用于处理序列数据,例如自然语言处理任务中的文本分类或序列生成等任务。 请注意,以上引用内容中给出的函数用法和参数说明都是基于TensorFlow的官方文档提供的信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [tf.keras.layers.Embedding函数](https://blog.csdn.net/weixin_49346755/article/details/124289692)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [tf.keras.layers.Embedding() 详解](https://blog.csdn.net/qq_42018521/article/details/128851594)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值