纯C++超分辨率重建SRCNN --改编--在Matlab导出卷积核参数(前奏三)

这里到Matlab中导出三层卷积核参数(即网络权重和偏移)

保存为txt文本文件,简单一点,只用 3倍模型

%保存模型权重

%载入模型
model = 'model\x3.mat';
load(model);

%保存模型数据
%偏移
%---------------------------------------
FID=fopen('model_x3.txt','w');

%biases_conv1
fprintf(FID,'biases_conv1\n' );
k=length(biases_conv1);
fprintf(FID,'长度 %d\n',k );%有多少个

for j=1:k
    fprintf(FID, '%f \n',biases_conv1(j)); % 
end
%--------------------------------------
%biases_conv2
fprintf(FID,'biases_conv2\n' );
k=length(biases_conv2);
fprintf(FID,'长度 %d\n',k );%有多少个

for j=1:k
    fprintf(FID, '%f \n',biases_conv2(j)); % 
end
%--------------------------------------
%biases_conv3
fprintf(FID,'biases_conv3\n' );
fprintf(FID,'长度 %d\n',1 );%有多少个

fprintf(FID, '%f \n',biases_conv3); % 
%--------------------------------------

%权重
%weights_conv1
fprintf(FID,'weights_conv1\n' );
[m,n,p]=size(weights_conv1);
fprintf(FID,'长度和宽度 %d %d\n',m,n );%有多少个
for i=1:n
    for j=1:m
        fprintf(FID, '%f \n',weights_conv1(j,i)); % 
    end
end
%--------------------------------------
%weights_conv2
fprintf(FID,'weights_conv2\n' );
[m,n,p]=size(weights_conv2);
fprintf(FID,'长度和通道 %d %d\n',m,p );%有多少个
for j=1:p
    weights_conv2_p = weights_conv2(:,:,j);
    for i=1:m
        fprintf(FID, '%f \n',weights_conv2_p(i,1)); % 
    end
end
%--------------------------------------
%weights_conv3
fprintf(FID,'weights_conv3\n' );
[m,n,p]=size(weights_conv3);
fprintf(FID,'长度和宽度 %d %d\n',m,n );%有多少个
for j=1:m
    for i=1:n
        fprintf(FID, '%f \n',weights_conv3(j,i)); % 
    end
end


fclose(FID);
%---------------------------------------

model_x3.txt 中的数据:

biases_conv1
长度 64
-0.002024 
-0.083690 
-0.021551 
...     (省略,下同)
-0.073157 
-0.012042 
0.040996 
-0.003123 
biases_conv2
长度 32
-0.001080 
-0.006114 
-0.007997 
...
biases_conv3
长度 1
0.028888 
weights_conv1
长度和宽度 81 64
...
0.102138 
weights_conv2
长度和通道 64 32
0.215097 
...
0.161985 
0.108080 
weights_conv3
长度和宽度 32 25
-0.015818 
...
0.010603 
-0.005007 
-0.005743 
0.011435 
(共8141行)

在程序中再导入数据作为卷积核数据,后面用到的loadModel,和导出对应:

bool loadModel(SRCNN模型 *sr)
{
	char name[]="model_x3.txt";
	std::ifstream fin(name);

	//检查文件是否存在
	if (!fin)
	{
	return false;
	}

	//从档案载入
	char str[40];
	int len,len1;

	//biases_conv1
	fin >> str;
	cout<<str<<endl;
	fin >> str;
	cout<<str<<endl;

	fin >> len;//需要载入的个数
	cout<<len<<endl;

	if(len==sr->偏移_conv1_长度)
	{
		for (int i=0; i<len; ++i)
		{
				
				fin >> sr->偏移_conv1_数据[i];
		}
	}

	//biases_conv2
	fin >> str;
	cout<<str<<endl;
	fin >> str;
	cout<<str<<endl;

	fin >> len;//需要载入的个数
	cout<<len<<endl;

	if(len==sr->偏移_conv2_长度)
	{
		for (int i=0; i<len; ++i)
		{
				
				fin >> sr->偏移_conv2_数据[i];
		}
	}

	//biases_conv3
	fin >> str;
	cout<<str<<endl;
	fin >> str;
	cout<<str<<endl;

	fin >> len;//需要载入的个数
	cout<<len<<endl;

	if(len==sr->偏移_conv3_长度)
	{
		for (int i=0; i<len; ++i)
		{
				
				fin >> sr->偏移_conv3_数据[i];
		}
	}

	//weights_conv1
	fin >> str;
	cout<<str<<endl;
	fin >> str;
	cout<<str<<endl;

	fin >> len;//需要载入的个数
	cout<<len<<endl;
	fin >> len1;//需要载入的个数
	cout<<len1<<endl;

		
	if((len==sr->权重_conv1_长度)&&(len1==sr->权重_conv1_宽度))
	{
		for (int i=0; i<len; ++i)
		{
			for (int j=0; j<len1; ++j)
			{
				fin >> sr->权重_conv1_数据[i*len1+j];
			}
			
		}
	}

	//weights_conv2
	fin >> str;
	cout<<str<<endl;
	fin >> str;
	cout<<str<<endl;

	fin >> len;//需要载入的个数
	cout<<len<<endl;
	fin >> len1;//需要载入的个数
	cout<<len1<<endl;

		
	if((len==sr->权重_conv2_长度)&&(len1==sr->权重_conv2_通道))
	{
		for (int i=0; i<len; ++i)
		{
			for (int j=0; j<len1; ++j)
			{
				fin >> sr->权重_conv2_数据[i*len1+j];
			}
			
		}
	}

	//weights_conv3
	fin >> str;
	cout<<str<<endl;
	fin >> str;
	cout<<str<<endl;

	fin >> len;//需要载入的个数
	cout<<len<<endl;
	fin >> len1;//需要载入的个数
	cout<<len1<<endl;

		
	if((len==sr->权重_conv3_长度)&&(len1==sr->权重_conv3_宽度))
	{
		for (int i=0; i<len; ++i)
		{
			for (int j=0; j<len1; ++j)
			{
				fin >> sr->权重_conv3_数据[i*len1+j];
			}
			
		}
	}
		
	fin.close ();  
	return true;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值