-
Notifications
You must be signed in to change notification settings - Fork 422
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
您好,对于代码有两个问题,请教您一下,谢谢 #65
Comments
尝试回答第一个问题: 太长不看版本: 详细: if vars is None:
vars = self.vars 只是单纯的让变量 elif name is 'linear':
# ↓初始化了一个全1的参数并将其kaiming标准化
w = nn.Parameter(torch.ones(*param))
torch.nn.init.kaiming_normal_(w)
# ↓把这个全1参数加入模型的参数列表
self.vars.append(w)
# ↓初始化一个全0的参数(即wx+b里的b)并把它加入模型的参数列表
self.vars.append(nn.Parameter(torch.zeros(param[0]))) 上面说过了,在初始化Meta类实例的时候已经随机初始化好了 初始化中指定了MAML的参数优化器: loss_q = losses_q[-1] / task_num
self.meta_optim.zero_grad()
loss_q.backward()
self.meta_optim.step() 因此每次forward结束后 |
line90 和 line101的两个with torch.no_grad()代码段看来确实没实际意义,后面更新meta时也没用到这两段的loss,单纯记录了下loss和correct数量。然后就是计算train acc 使用了这两个部分的correct 数量,让大家看看从随机参数的acc到迭代1、2 ... K轮后的acc变化,再到后面每个batch初始化上一个batch更新的meta参数初始化的acc变化。 |
第一个问题:
在meta.py文件中
第82行,相当于每次更新一次Meta的参数后,下一次任务的开始,Meta的参数又会被重新初始化,那么我们在for循环结束后更新Meta参数的意义是什么呢?
第二个问题:
在Meta.py文件中
我们发现有两个“with torch.no_grad():”,那这里面的两个操作的意义是什么呢,感觉并不参与训练,更像是在记录日志
The text was updated successfully, but these errors were encountered: