kaiwang960112/Self-Cure-Network

您好,我发现src/train.py文件中的加载预训练部分 没有把您给的预训练权重加载进去

cotyyang opened this issue · 17 comments

我打印了加载预训练前后的部分层的参数,发现没有更改。
并且line154很奇怪,因为152行的操作,这里是一定为True吧。

你好我也发现了这样的情况。请问你解决了吗
image

if args.pretrained: print("Loading pretrained weights...", args.pretrained) pretrained = torch.load(args.pretrained) pretrained_state_dict = pretrained['state_dict'] # import pickle # with open(args.pretrained, 'rb') as f: # obj = f.read() model_state_dict = res18.state_dict() loaded_keys = 0 total_keys = 0 # for key, w in pickle.loads(obj, encoding='latin1').items(): for key in pretrained_state_dict: # key1 = key[7:] if ((key == 'module.fc.weight') | (key == 'module.fc.bias')): pass elif ((key == 'fc.weight') | (key == 'fc.bias')): pass else: if key in model_state_dict: loaded_keys += 1 model_state_dict[key] = pretrained_state_dict[key] # model_state_dict[key] = torch.from_numpy(w) total_keys += 1 print("Loaded params num:", loaded_keys) print("Total params num:", total_keys) res18.load_state_dict(model_state_dict, strict=False)

image
格式有点问题。我最后是这样的解决的

好的,我明天试试看,非常感谢 | | @.*** | | @.*** |

---- 回复的原邮件 ---- | 发件人 | @.> | | 日期 | 2023年04月03日 22:11 | | 收件人 | @.> | | 抄送至 | @.>@.> | | 主题 | Re: [kaiwang960112/Self-Cure-Network] 您好,我发现src/train.py文件中的加载预训练部分 没有把您给的预训练权重加载进去 (Issue #81) | 格式有点问题。我最后是这样的解决的 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

没事,我当时也是搞了半天才解决

你好,我试了一下发现还是没有加载进去预训练权重。你这个代码好像就是把原来的语句换了一下顺序。
image
image

你好,我试了一下发现还是没有加载进去预训练权重。你这个代码好像就是把原来的语句换了一下顺序。 image image

对了,我还换了个预训练模型,用的这个链接里面的 zyh-uaiaaaa/Relative-Uncertainty-Learning#11

这个预训练模型我之前也用过,对于这种标准的resnet18预训练模型可以直接用下面的代码初始化模型
image
我不会的就是不知道怎么利用像SCN这篇文章中的一样的预训练模型来初始化(即预训练模型的key值和标准的resnet18不一样,不好找到一一对应)

这个预训练模型我之前也用过,对于这种标准的resnet18预训练模型可以直接用下面的代码初始化模型 image 我不会的就是不知道怎么利用像SCN这篇文章中的一样的预训练模型来初始化(即预训练模型的key值和标准的resnet18不一样,不好找到一一对应)

image
我刚试了下,这样就好了

还是不行呀
image
感觉就算key1把key的module给去掉还是和res18的不一样。我知道应该是写代码把预训练模型里的key值改变成resnet18里的key值(这样就能更新resnet18的模型参数了),但不知道该怎么改能够准确地一一对应上

我想探究一下不同预训练模型对baseline的影响,但是之前看的好多论文基本上都是用的同一个预训练模型(你之前说的那个RUL里的预训练模型和我之前用的也是一样)

可以了,我把初始化移到了模型的类里面,然后你的代码就能够成功把预训练模型里的key值一一对应地改变成resnet18里的key值
image

非常感谢!有了一个成功案例以后就知道该咋改了

可以了,我把初始化移到了模型的类里面,然后你的代码就能够成功把预训练模型里的key值一一对应地改变成resnet18里的key值 image

非常感谢!有了一个成功案例以后就知道该咋改了

没事

可以了,我把初始化移到了模型的类里面,然后你的代码就能够成功把预训练模型里的key值一一对应地改变成resnet18里的key值 image
非常感谢!有了一个成功案例以后就知道该咋改了

没事

你好,但是这样虽然可以训练,但是测试时好像还是有问题,无法对应上,你们知道怎么解决吗

我的源代码就是这样写的,然后debug也能看出来模型的参数被成功更新为预训练的权重了。你要不在检查检查代码? | | @.*** | | @.*** |

---- 回复的原邮件 ---- | 发件人 | @.> | | 日期 | 2023年04月09日 23:45 | | 收件人 | @.> | | 抄送至 | @.>@.> | | 主题 | Re: [kaiwang960112/Self-Cure-Network] 您好,我发现src/train.py文件中的加载预训练部分 没有把您给的预训练权重加载进去 (Issue #81) | 可以了,我把初始化移到了模型的类里面,然后你的代码就能够成功把预训练模型里的key值一一对应地改变成resnet18里的key值 非常感谢!有了一个成功案例以后就知道该咋改了 没事 你好,但是这样虽然可以训练,但是测试时好像还是有问题,无法对应上,你们知道怎么解决吗 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

我现在在使用的是一个第三方复现的代码,很奇怪的是,我将那个代码预训练部分变为和官方一样时,预训练参数好像加载进去了,第一轮的验证集精度就有0.69几,这应该是加载进去了吧。另外,我最近也在研究这篇论文代码,不知能否加个联系方式,请教一下呢?