You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Transformer中图像Embedding为浮点列表,文本Embedding为嵌套列表的原因

为什么Transformer的图像Embedding是浮点列表,文本Embedding是浮点嵌套列表?

这俩格式差异的核心原因是你在获取图像Embedding时手动提取了单个样本,而文本Embedding保留了批量维度。

图像Embedding的代码分析

batch_size = 1
inputs = processor(images=image, return_tensors="pt", padding=True)
image_features = model.get_image_features(inputs.pixel_values)[batch_size-1]  # 关键的索引操作
embeddings = image_features.numpy().astype(np.float32)

model.get_image_features原本返回的是形状为(batch_size, embedding_dim)的张量,你通过[batch_size-1](也就是[0])提取了批量中的第一个样本,直接去掉了外层的批量维度,最终得到一维的浮点列表。

文本Embedding的代码分析

inputs = tokenizer(text, return_tensors = "pt")
text_embeddings = model.get_text_features(**inputs)
embedding_as_np = text_embeddings.cpu().detach().numpy()
embeddings = embedding_as_np.astype(np.float32)

这里model.get_text_features同样返回(batch_size, embedding_dim)的张量,但你没有做索引提取操作,直接转成numpy数组后保留了批量维度,所以变成了(1, embedding_dim)的二维数组,也就是你看到的“仅含一个元素的浮点嵌套列表”。

统一格式的方法

如果想让文本Embedding也变成一维浮点列表,只需要添加索引提取单个样本:

inputs = tokenizer(text, return_tensors = "pt")
text_embeddings = model.get_text_features(**inputs)[0]  # 提取第一个样本
embedding_as_np = text_embeddings.cpu().detach().numpy()
embeddings = embedding_as_np.astype(np.float32)

反过来,要是想让图像Embedding保留嵌套格式,去掉索引操作即可。

内容的提问来源于stack exchange,提问作者Tiina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:04:53