c++读入和写出csv文件 10C
#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
求解

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问