#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
int main(){
int no_of_samples,no_of_inputs,no_of_outputs;
int no_of_hiddenLayers = 1;
int no_of_models = 10;
int no_of_hiddenNodes = 10;
char* benchmark_name = (char *) malloc(150);
char* inputWeight = (char *) malloc(150);
char* Bias = (char *) malloc(150);
char* outputWeight = (char *) malloc(150);
ifstream inFile;
inFile.open("Abalone.txt",ios::in);
inFile >> no_of_samples;
inFile >> no_of_inputs;
inFile >> no_of_outputs;
for(int m=1;m<=no_of_models;m++){
//读入inputWeight
sprintf(inputWeight,"%s%d","./Abalone/relu_InputWeight_Model",m);
ifstream inFile;
inFile.open(inputWeight,ios::in);
vector<vector<int>> strArray;
int allNodes = m*no_of_hiddenNodes;
for(int i=0;i<allNodes;i++){
vector<int> lineArray;
for(int j=0;j<no_of_inputs;j++){
float data;
inFile >> data;
lineArray.push_back(data);
}
strArray.push_back(lineArray);
}
inFile.close();
inFile.clear(ios::goodbit);
//读入Bias
sprintf(Bias,"%s%d","./Abalone/relu_BiasofHiddenNeurons_Model",m);
//ifstream inFile;
inFile.open(Bias,ios::in);
float no1;
vector<int> noArray1;
for(int i=0;i<allNodes;i++){
noArray1.push_back(no1);
}
inFile.close();
inFile.clear(ios::goodbit);
//输出inputWeight和Bias
sprintf(benchmark_name,"%s%d%s","Abalone_Model",m,".csv");
ofstream outFile;
outFile.open(benchmark_name,ios::out);
outFile << no_of_inputs << endl;
outFile << no_of_outputs << endl;
outFile << no_of_hiddenLayers << endl;
outFile << m*no_of_hiddenNodes << endl;
for(int i=0;i<allNodes;i++){
for(int j=0;j<8;j++){
outFile << strArray[i][j] << endl;
}
outFile << noArray1[i] << endl;
}
outFile.close();
}
//读入和输出outputWeight
for(int m=1;m<no_of_models;m++){
int allNodes = m*no_of_hiddenNodes;
sprintf(outputWeight,"%s%d","./Abalone/relu_OutputWeight_Model",m);
inFile.open(outputWeight);
float no2;
vector<int> noArray2;
for(int i=0;i<allNodes;i++){
noArray2.push_back(no2);
}
inFile.close();
inFile.clear(ios::goodbit);
sprintf(benchmark_name,"%s%d%s","Abalone_Model",m,".csv");
ofstream outFile;
outFile.open(benchmark_name,ios::app);
int no_of_outputWeightSide = m*no_of_hiddenNodes;
for(int i=0;i<no_of_outputWeightSide;i++){
outFile << noArray2[i] << endl;
}
outFile.close();
}
return 0;
}
relu_BiasofHiddenNeurons_Model和relu_InputWeight_Model和relu_OutputWeight_Model都有十个文件,对应十个模型。
每个模型都是8个输入和一个输出,只有一层隐藏层,不同的是隐藏节点数。
第一个模型有10个隐藏节点,第二个有20个节点,以此类推。因此第一个输入权重文件(relu_InputWeight_Model1)有十行数据,每行有8个数据,对应8个属性,第二个输入权重有二十行,以此类推。
隐藏节点偏差文件(relu_BiasofHiddenNeurons_Model)是描述节点的偏差,因此第一个文件有10个数据,每个数据占一行。
输出权重文件(relu_OutputWeight_Model)描述网络的输出权重,因此第一个文件也只有10个数据,每个数据占一行。
代码的目的是想按这样的格式输出文件:
输入个数(no_of_inputs)
输出个数(no_of_outputs, 这里只为1)
隐藏层数(no_of_hiddenLayers, 这里只为1)
隐藏层节点数(no_of_hiddenNodes)
每个输入到第一个隐藏节点的权重
第一个隐藏节点的偏差
每个输入到第二个隐藏节点的权重
第二个隐藏节点的偏差
...
...
...
每个输入到最后一个隐藏节点的权重
最后一个隐藏节点的偏差
每个隐藏节点到输出节点的权重
输出节点的偏差
以图为例:
代码可以输出10个csv文件,但每个csv文件只有前四行正确输出,即
输入个数(no_of_inputs)
输出个数(no_of_outputs, 这里只为1)
隐藏层数(no_of_hiddenLayers, 这里只为1)
隐藏层节点数(no_of_hiddenNodes)
之后的数据全部为0
求解