Chinese-CLIP icon indicating copy to clipboard operation
Chinese-CLIP copied to clipboard

相同的文本词,使用encode_text产出的结果不一样

Open m3n78amv2 opened this issue 2 years ago • 2 comments

我是使用源码安装的cn_clip,然后执行了下面代码

import cn_clip.clip as clip
import torch
import cn_clip
from cn_clip.clip import load_from_name, available_models

# 加载clip模型
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"device: {device}")
model, preprocess_clip = load_from_name("ViT-L-14", device=device, download_root=os.path.dirname(os.path.realpath(__file__)) + "/../assets")

print(f"使用的device: {device}")
print(f"加载clip模型完毕")

for x in range(10):
    text_tokens = cn_clip.clip.tokenize(["侧空翻"]).to(device)
    with torch.no_grad():
        text_features = model.encode_text(text_tokens)
        text_features /= text_features.norm(dim=-1, keepdim=True)
    print(f"{text_features[0][:5]}") # 只输出前五个以方便显示

10次调用模型生成embedding,结果都不一样 image

调试进去看model.encode_text方法,发现387行的self.bert跑出来的结果每次都不一样 image

应该怎么调整参数来保证相同的text产生相同的embedding

m3n78amv2 avatar Dec 07 '23 06:12 m3n78amv2

模型忘记设置evel()了吧。。。

jiarenyf avatar Jan 23 '24 09:01 jiarenyf

模型忘记设置evel()了吧。。。

是的, 调试到内部时候发现是有一层dropout的问题,eval之后就固定了

m3n78amv2 avatar Jan 26 '24 00:01 m3n78amv2