Pytorch实现对卷积的可插拔reparameterization
2024-10-19 08:28:00
需要实现对卷积层的重参数化reparameterization
但是代码里卷积前weight并没有hook,很难在原本的卷积类上用pure oo的方式实现
目前的解决方案是继承原本的卷积,挂载一个weight module替代原本的weight parameter。需要hack一下getattr
大致代码:
class ReparamLayer(nn.module):
def __init__(self, weight:nn.Parameter):
self.weight = weight
def forward(self):
reparam = self.weight
# do something
# reparam = fn(reparam)
return reparam
@property
def data(self):
return self.forward() # hack
class ReparamConv2d(nn.Conv2d):
def __init__(self, *args, **kwargs):
self._inited = False
super().__init__
w = self.weight
self._inited = True
self._weight = ReparamLayer(w) # reparam weights here
del self._parameters['weight']
def __getattr__(self, item):
if self._inited and item == 'weight':
return self._weight # hack
else:
return super().__getattr__(item)
最新文章
- 不用画线 设置UITableView的全屏分隔线
- HDU 1686 &; KMP
- Origin的图片导出问题
- BZOJ3672 : [Noi2014]购票
- JavaWEB入门
- 无法向会话状态服务器发出会话状态请求请。确保 ASP.NET State Service (ASP.NET 状态服务)已启动
- JNDI绑定数据库
- Java第一阶段总结
- opencar二次开发常用代码
- mysql commit 和 rollback
- [ABP]浅谈工作单元 在整个 ABP 框架当中的应用
- Node.js安装及环境配置之Windows篇---完美,win7已测
- 分布式队列神器 Celery
- 百度编辑器UEditor 点击上传图片选择框会延迟几秒才会显示 反应很慢(转)
- Java:ConcurrentHashMap支持完全并发的读
- Mybatis学习——resultMap使用
- 背水一战 Windows 10 (61) - 控件(媒体类): InkCanvas 涂鸦编辑
- JFreeChart 之饼图
- 开源ckplayer 网页播放器去logo去广告去水印修改
- bzoj 4919 [Lydsy1706月赛]大根堆 set启发式合并+LIS