<>强任务要求:强>
自定义一个层主要是定义该层的实现函数,只需要重载功能的向前和向后函数即可,如下:
进口火炬 从火炬。autograd导入功能 从火炬。autograd导入变量
<强>定义二值化函数强>
类BinarizedF(函数): def向前(自我、输入): self.save_for_backward(输入) 一个=torch.ones_like(输入) b=-torch.ones_like(输入) 输出=torch.where (input>=0, a, b) 返回输出 def向后(自我,output_grad): 输入=self.saved_tensors input_abs=torch.abs(输入)> 类BinarizedModule (nn.Module): def __init__(自我): 超级(BinarizedModule自我). __init__ () 自我。男朋友=BinarizedF () def向前(自我、输入): 打印(input.shape)=self.BF输出(输入) 返回输出
<强>进行测试强>
一个=变量(torch.randn (4480640), requires_grad=True) 输出=BinarizedModule () () output.backward (torch.ones (a.size ())) print () 打印(a.grad)
其中,二值化函数部分也可以按照方式写,但是速度慢了0.05秒
类BinarizedF(函数): def向前(自我、输入): self.save_for_backward(输入)=torch.ones_like输出(输入) 输出(input<0)=1 返回输出 def向后(自我,output_grad): 输入=self.saved_tensors input_grad=output_grad.clone () input_abs=torch.abs(输入) input_grad [input_abs> 1]=0 返回input_grad
以上这篇pytorch自定义二值化网络层方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。