Open m3n78amv2 opened 8 months ago
我是使用源码安装的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,结果都不一样
调试进去看model.encode_text方法,发现387行的self.bert跑出来的结果每次都不一样
应该怎么调整参数来保证相同的text产生相同的embedding
模型忘记设置evel()了吧。。。
是的, 调试到内部时候发现是有一层dropout的问题,eval之后就固定了
我是使用源码安装的cn_clip,然后执行了下面代码
10次调用模型生成embedding,结果都不一样![image](https://github.com/OFA-Sys/Chinese-CLIP/assets/95309346/087d9659-e5a0-43d1-88d3-6229ff631e92)
调试进去看model.encode_text方法,发现387行的self.bert跑出来的结果每次都不一样![image](https://github.com/OFA-Sys/Chinese-CLIP/assets/95309346/aa1c85d2-3cd9-4600-9684-eff38af589c7)
应该怎么调整参数来保证相同的text产生相同的embedding