tf.keras.layers.Embedding 嵌入层 示例

将正整数(索引)转换为固定大小的密集向量。此层只能用作模型中的第一层

import tensorflow as tf
import numpy as np
embedding_layer  = tf.keras.layers.Embedding(
    1000, # 输入索引的最大限制
    4, # 输出向量的维度
#     input_length=10 # 输入序列的长度
)
print(embedding_layer)
<keras.layers.embeddings.Embedding object at 0x000001CE579C0BB0>
input_array = np.random.randint(10, size=(2, 3))
print(input_array.shape)  # 输入:2个样本,每个样本3个索引
(2, 3)
print(input_array)
[[8 2 5]
 [4 0 1]]
output_array = embedding_layer(input_array)   # 索引 转 向量
print(output_array)   # 输出:2个样本,每个样本3个向量,每个向量都是4维。
tf.Tensor(
[[[-0.01356944 -0.03771597 -0.00765408 -0.0108991 ]
  [-0.01145458  0.00670235 -0.04148499  0.03742183]
  [ 0.02257642 -0.01279204  0.0417194  -0.01290895]]

 [[ 0.02775535 -0.02057298 -0.01002337 -0.00311716]
  [-0.01408575 -0.00358304 -0.04300636  0.01298282]
  [-0.04962901 -0.02087239 -0.00043805 -0.01269226]]], shape=(2, 3, 4), dtype=float32)

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
是的,TensorFlow Keras中提供了Transformer的封装。您可以在`tensorflow.keras.layers`中找到`MultiHeadAttention`和`Transformer`等。`Transformer`将多头自注意力和前馈神经网络组合在一起,实现了Transformer的核心架构。您可以使用这些来构建自己的Transformer模型。以下是一个简单的示例: ```python import tensorflow as tf # 定义Transformer class TransformerBlock(tf.keras.layers.Layer): def __init__(self, embedding_dim, num_heads, dense_dim, rate=0.1): super().__init__() self.attention = tf.keras.layers.MultiHeadAttention(num_heads=num_heads, key_dim=embedding_dim) self.dense1 = tf.keras.layers.Dense(dense_dim, activation='relu') self.dense2 = tf.keras.layers.Dense(embedding_dim) self.dropout1 = tf.keras.layers.Dropout(rate) self.dropout2 = tf.keras.layers.Dropout(rate) self.layer_norm1 = tf.keras.layers.LayerNormalization(epsilon=1e-6) self.layer_norm2 = tf.keras.layers.LayerNormalization(epsilon=1e-6) def call(self, inputs, training): attn_output = self.attention(inputs, inputs) attn_output = self.dropout1(attn_output, training=training) out1 = self.layer_norm1(inputs + attn_output) dense_output = self.dense1(out1) dense_output = self.dense2(dense_output) dense_output = self.dropout2(dense_output, training=training) out2 = self.layer_norm2(out1 + dense_output) return out2 # 定义Transformer模型 class TransformerModel(tf.keras.Model): def __init__(self, num_layers, embedding_dim, num_heads, dense_dim, input_vocab_size, target_vocab_size, rate=0.1): super().__init__() self.embedding = tf.keras.layers.Embedding(input_vocab_size, embedding_dim) self.transformer_blocks = [TransformerBlock(embedding_dim, num_heads, dense_dim, rate) for _ in range(num_layers)] self.dense = tf.keras.layers.Dense(target_vocab_size) def call(self, inputs, training): embed_output = self.embedding(inputs) for transformer_block in self.transformer_blocks: embed_output = transformer_block(embed_output, training) output = self.dense(embed_output) return output ``` 在此示例中,我们定义了一个`TransformerBlock`和一个`TransformerModel`模型。`TransformerBlock`包含多头自注意力、前馈神经网络和残差连接,并使用归一化进行归一化。`TransformerModel`模型包含多个`TransformerBlock`以及嵌入和最终的全连接。通过这些的组合,我们可以构建一个完整的Transformer模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏华东的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值