32位C++改编 风格转移(style)之应用(生成) ---(一)内存数据

还是和前面一样,我们只关注模型训练好后的应用,即生成网络

先看图:

它由1个输入卷积和2个下采样层(步长为2的卷积)和ReLU非线性,

5个残差块,

2个上采样层(步长为1/2的卷积,就是哪个反向卷积(转置))

最后是一个产生输出图像的非线性tanh层组成。 

残差块图:

残差块由2个卷积和一个ReLU组成

网络内部效果图:

定义数据池:

struct Transformation_tf模型
{

	层数据 * 输入层;
	层数据 * 下采样层1;
	层数据 * 下采样层2;

	int 残差块数量;//5块
	残差块 * 块;

	层数据 * 上采样层1;
	层数据 * 上采样层2;
	层数据 * 输出层;
	
	//构造函数
	Transformation_tf模型();

};

初始化:

Transformation_tf模型::Transformation_tf模型()
{

	int size;

	size = sizeof(层数据);//
	输入层 =(层数据 *)malloc(size);

	层数据 * 层=输入层;
	层->权重长度=32*3*9*9;
	层->权重_数据=(float*)malloc(sizeof(float) * 层->权重长度);
	层->输入维度=3;
	层->输出维度=32;
	层->核宽=9;
	层->偏移长度=0;
	层->偏移_数据=NULL;

	//下采样层1;
	size = sizeof(层数据);//
	下采样层1 =(层数据 *)malloc(size);

	 层=下采样层1;
	层->权重长度=64*32*3*3;
	层->权重_数据=(float*)malloc(sizeof(float) * 层->权重长度);
	层->输入维度=32;
	层->输出维度=64;
	层->核宽=3;
	层->偏移长度=0;
	层->偏移_数据=NULL;

	// 下采样层2;
	size = sizeof(层数据);//
	下采样层2 =(层数据 *)malloc(size);

	 层=下采样层2;
	层->权重长度=128*64*3*3;
	层->权重_数据=(float*)malloc(sizeof(float) * 层->权重长度);
	层->输入维度=64;
	层->输出维度=128;
	层->核宽=3;
	层->偏移长度=0;
	层->偏移_数据=NULL;

	
	//块 
	残差块数量=5;
	size = sizeof(残差块)*残差块数量;
	块=(残差块*)malloc(size);
	残差块 * 残差块0=块;
	for (int k = 0;k<残差块数量;k++)
	{

		残差块0->num=2;
			
		size = sizeof(层数据)*2;

		残差块0->卷积层=(层数据*)malloc(size);
			
		层=残差块0->卷积层;

		for(int p=0;p<2;p++){
				层->权重长度=128*128*3*3;
				层->权重_数据=(float*)malloc(sizeof(float) * 层->权重长度);
				层->输入维度=128;
				层->输出维度=128;
				层->核宽=3;
				层->偏移长度=0;//
				层->偏移_数据=NULL;//

				层++;
		}

		残差块0++;
	}


	//上采样层1;

			size = sizeof(层数据);//
			上采样层1=(层数据 *)malloc(size);
			层=上采样层1;
				层->权重长度=64*128*3*3;
				层->权重_数据=(float*)malloc(sizeof(float) * 层->权重长度);
				层->输入维度=128;
				层->输出维度=64;
				层->核宽=3;
				层->偏移长度=0;
				层->偏移_数据=NULL;

	//上采样层2;
			size = sizeof(层数据);//
			上采样层2=(层数据 *)malloc(size);
			层=上采样层2;
				层->权重长度=32*64*3*3;
				层->权重_数据=(float*)malloc(sizeof(float) * 层->权重长度);
				层->输入维度=64;
				层->输出维度=32;
				层->核宽=3;
				层->偏移长度=0;
				层->偏移_数据=NULL;
	//输出层;
			size = sizeof(层数据);//
			输出层=(层数据 *)malloc(size);
			层=输出层;
				层->权重长度=3*32*9*9;
				层->权重_数据=(float*)malloc(sizeof(float) * 层->权重长度);
				层->输入维度=32;
				层->输出维度=3;
				层->核宽=9;
				层->偏移长度=0;
				层->偏移_数据=NULL;


}

然后就可以载入数据了,

由于数据中有nan值,这里先把它们替换为0。这样可能会和tf结果相差一点吧

这部分结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值