pytorch自定义二值化网络层方式

  

<>强任务要求:

  

自定义一个层主要是定义该层的实现函数,只需要重载功能的向前和向后函数即可,如下:

        进口火炬   从火炬。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自定义二值化网络层方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

pytorch自定义二值化网络层方式