纯C++超分辨率重建DRRN --改编--(二)归一化(BatchNorm) 和 缩放和平移(Scale)

DRRN和前面相比增加了

1。归一化(BatchNorm)

其中 均值(u) 和方差(std)需要除以一个约等于1000的比例因子,std 还要开平方 该部分已经放到载入模型中去了:

// 输入归一化 x_norm = (x-u)/std, 其中u和std是个累计计算的均值和方差。
// 其中 u,std需要除以一个约等于1000的比例因子,std 还要开平方 已经放到载入模型部分去了
// u =*data/scale_factor;std = sqrt(*data/scale_factor);
void vl_BatchNorm(卷积层 * out,float * u,float * std)//函数 均值 方差
{

	float * s=out->data, *s0;
	float p;
	int width=out->width; 
	int height=out->height; 

	float * u0=u, * std0=std;

	for (int c=0; c<out->depth; ++c)
	{
		for (int i=0; i<height; ++i)
		{
			for (int j=0; j<width; ++j)
			{
				s0 = s+i*width+j;
				p  = *s0;//
					*s0 = (p-(*u0))/(*std0);//均值 方差
			}
			
		}
		s+=width*height;//下一通道
		u0++;std0++;
	}

}

2。缩放和平移(Scale):

// y=alpha*x_norm + beta,对归一化后的x进行比例缩放和位移。
void vl_Scale(卷积层 * out,float * alpha,float * beta)
{

	float * s=out->data, *s0;
	float p;
	int width=out->width; 
	int height=out->height; 

	float * a0=alpha, * b0=beta;

	for (int c=0; c<out->depth; ++c)
	{
		for (int i=0; i<height; ++i)
		{
			for (int j=0; j<width; ++j)
			{
				s0 = s+i*width+j;
				p  = *s0;//
					*s0 = p*(*a0)+(*b0);//缩放和平移
			}
			
		}
		s+=width*height;//下一通道
		a0++;b0++;
	}

}

该部分完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值