【深度学习】提取模块的backbone是相同的,但是需要多个头来做分类,应该如何做
·
x= self.seq(x)
假设经过这一步,输出了需要分类的特征。
head1 = nn.Linear(linear_size, n_classes)
head2 = nn.Linear(linear_size, n_classes)
.........
然后,就可以做分类了:
x = self.seq(x)
head1_out = head1(x)
head2_out = head2(x)
......
问题:
-
那可不可以同时复用head1的而不用new这么多head?
若是你的head层的权重是不被调整更新的那可以,(但应该把它过滤掉,设置为不随训练更新,参考transformer的位置编码) -
head多了,那就一个个手动改代码么?
可以做成pipeline
# head_num 为头的数量,这个示例是 linear_size 和 n_classes是相同的,你做个列表,就可以自动提取不相同了。
nn.ModuleList([nn.Linear(linear_size3, n_classes) for _ in range(head_num)])
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)