Embedding Layer可视化
时间: 2025-05-10 11:40:15 浏览: 26
### 使用TensorFlow和Pytorch实现Embedding Layer的可视化
#### TensorFlow中的嵌入层可视化
在TensorFlow中,可以利用`tf.keras.layers.Embedding`创建嵌入层并将其权重保存下来用于后续可视化。通过TensorBoard插件Projector模块能够加载这些权重文件并将它们映射到二维空间以便观察。
以下是具体操作过程以及代码示例:
```python
import tensorflow as tf
from tensorflow import keras
import numpy as np
# 创建简单的模型结构来演示 Embedding 层
vocab_size = 10000 # 假设字典大小为1万词
embedding_dim = 64 # 每个单词向量维度设置成64维
input_length = 20 # 输入序列长度固定为20
model = keras.Sequential([
keras.layers.Embedding(input_dim=vocab_size,
output_dim=embedding_dim,
input_length=input_length)])
# 构造一些虚拟数据作为输入
data = np.random.randint(0, vocab_size, size=(32,input_length))
embeddings = model(data)
print(f'Embedding shape: {embeddings.shape}')
# 提取 Embedding 权重矩阵供 Tensorboard projector 加载
weights = model.layers[0].get_weights()[0]
with open("vecs.tsv", "w+", encoding="utf-8") as f_vecs:
with open("meta.tsv", "w+", encoding="utf-8") as f_meta:
for i in range(vocab_size):
vec = weights[i]
meta_word = str(i) # 这里简单用索引来代表词汇表里的词语
f_meta.write(meta_word + "\n")
f_vecs.write("\t".join([str(x) for x in vec]) + "\n")
# 配置好上述两个tsv文件之后,在命令行启动 tensorboard 并指定logdir路径即可查看效果。
```
以上脚本会生成两份TSV格式的数据文件——一个是包含所有词汇对应向量表示(`vecs.tsv`);另一个则是对应的元信息比如词汇本身或者类别标签等(`meta.tsv`)。接着按照官方文档指引配置好项目参数后就可以借助TensorBoard工具直观展现高维特征分布情况了[^1]。
#### PyTorch中的嵌入层可视化
对于PyTorch框架而言,则可通过调用其内置API `torch.nn.Embedding` 实现相同功能。同样地,我们需要先定义网络架构再提取出相应的权值部分进而完成绘图工作流程如下所示:
```python
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
class SimpleModel(nn.Module):
def __init__(self, num_embeddings, embedding_dim):
super(SimpleModel, self).__init__()
self.embedding_layer = nn.Embedding(num_embeddings=num_embeddings,
embedding_dim=embedding_dim)
def forward(self, inputs):
return self.embedding_layer(inputs)
num_embeddings = 500 # 字典规模设定为五百项
embedding_dim = 3 # 向量化后的维度定为三维方便作图展示
dummy_input = torch.LongTensor([[i % num_embeddings for _ in range(1)]for i in range(10)])
net = SimpleModel(num_embeddings=num_embeddings, embedding_dim=embedding_dim)
output = net(dummy_input).detach().numpy()
# 应用 t-SNE 方法降维处理原始高维数据至平面坐标系上呈现出来
X_embedded = TSNE(n_components=2).fit_transform(output.reshape(-1, embedding_dim))
plt.scatter(X_embedded[:, 0], X_embedded[:, 1])
plt.show()
```
此段程序首先建立了一个简易版神经网络类对象SimpleModel继承自nn.Module基类,并在其内部初始化了一组随机赋初值过的嵌入表格。随后模拟了一些整数型编号形式的样本送入该模型得到相应输出结果。最后采用sklearn库里面的manifold子包下的TSNE算法把所得低维表达进一步压缩投影到了笛卡尔直角平面上并通过matplotlib渲染图形界面予以表现[^3]。
另外值得注意的是如果想批量预览多幅图像则可考虑运用torchvision.utils.make_grid辅助函数快速拼接排列多个小型画布单元格形成统一整体布局样式[^2]。
阅读全文
相关推荐




















