math.h中的fmin,fmax,atan(1)*4

1.fmin,

fmin函数是用于比较两个数之间的大小并返回较小的那个值

fmax函数是用于比较两个数之间的大小并返回较大的那个值

例如:

#include<stdio.h>
#include<math.h>
int main()
{
	int a=0,b=0;
	a=fmin(1,2);
	b=fmax(1,2);
	printf("%d\n",a);
	printf("%d",b);
    return 0;	
}

1

2

 2.atan(1)*4

PI=atan(1.0)*4.0

atan()是反正切函数(数学的arctan)这个式子的意思是pi(圆周率π)等于4乘以1.0的反正切值;

该三个函数的头文件都为math.h,在使用时需要引入math.h;

# -*- coding: utf-8 -*- """ Created on Fri Mar 5 19:13:21 2021 @author: LXM """ import torch import torch.nn as nn from torch.autograd import Function class UpdateRange(nn.Module): def __init__(self, device): super(UpdateRange, self).__init__() self.device = device self.flag = 0 self.fmin = torch.zeros((1), dtype = torch.float32, device = self.device) self.fmax = torch.zeros((1), dtype = torch.float32, device = self.device) def Update(self, fmin, fmax): if self.flag == 0: self.flag = 1 new_fmin = fmin new_fmax = fmax else: new_fmin = torch.min(fmin, self.fmin) new_fmax = torch.max(fmax, self.fmax) self.fmin.copy_(new_fmin) self.fmax.copy_(new_fmax) @torch.no_grad() def forward(self, input): fmin = torch.min(input) fmax = torch.max(input) self.Update(fmin, fmax) class Round(Function): @staticmethod def forward(self, input): # output = torch.round(input) # output = torch.floor(input) output = input.int().float() return output @staticmethod def backward(self, output): input = output.clone() return input class Quantizer(nn.Module): def __init__(self, bits, device): super(Quantizer, self).__init__() self.bits = bits self.scale = 1 self.UpdateRange = UpdateRange(device) self.qmin = torch.tensor((-((1 << (bits - 1)) - 1)), device = device) self.qmax = torch.tensor((+((1 << (bits - 1)) - 1)), device = device) def round(self, input): output = Round.apply(input) return output def Quantization(self): quant_range = float(1 << (self.bits - 1)) float_range = torch.max(torch.abs(self.UpdateRange.fmin), torch.abs(self.UpdateRange.fmax)) scale = 1 for i in range(32): if torch.round(float_range * (1 << i)) < quant_range: scale = 1 << i else: break self.scale = scale def forward(self, input): if self.training: self.UpdateRange(input) self.Quantization() output = (torch.clamp(self.round(input * self.scale), self.qmin, self.qmax)) / self.scale return output
07-10
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值