投稿者 マジェ  (学生) 投稿日時 2011/11/30 17:58:45
返答有難うございます。

サンプルコードの環境はC言語ではなく、Microsoft Visual C++ .NET でした。
この言語は勉強していないこともあり、すいませんけどあまり分かりません。

サンプルコードの一部を貼り付けさせて頂きますので、ご協力お願いします。

#ifndef __MLP_H__
#define __MLP_H__
#include "Sample.h"
#include "Matrix.h"
#include "Numeric.h"
using namespace std;

typedef vector<int> vi;
typedef vector<bool> vb;
typedef vector<double> vd;
typedef Matrix<double> md;

class Mlp
{
public:
vi size;
vb act;
double eta;
double theta;

vd u[3];
vd x[3];
vd d[3];
md w[2];
double err;
public:
Mlp& Init(MlpParam& mp);
void New(istream& is);
void Read(istream& is);
void Write(ostream& os);
void Prop(const vd& in);
double& Err(const vd& tar);
void BackProp(const vd& tar);
void RenewWgt(void);
void BackPropDlt(const vd& dlt);
void RndWgt(void);

void Print(ostream& os);
};
//MLPの設定パラメータのクラス/////////////////////////////////
MlpParam::MlpParam(const MlpParam& mp)
{
size = mp.size;
act = mp.act;
eta = mp.eta;
theta = mp.theta;
}

MlpParam& MlpParam::operator =(const MlpParam& mp)
{
size = mp.size;
act = mp.act;
eta = mp.eta;
theta = mp.theta;
return *this;
}
Mlp& Mlp::Init(MlpParam& mp)
{
for(int i=0; i<3; i++) size.push_back(mp.size[i]);
for(int i=0; i<3; i++) act.push_back(mp.act[i]);
eta = mp.eta;
theta = mp.theta;
if(act[0]!=1) act[0]=0; // 入力層の出力関数は線形にセットされます.
//陰変数
for(int l=0; l<3; l++){
for(int i=0; i<size[l]; i++){
u[l].push_back(0);
x[l].push_back(0);
d[l].push_back(0);
}
}
err = 0;

for(int l=0; l<2; l++) w[l].Init(size[l+1], size[l]+1);
RndWgt();
return *this;
}

void Mlp::New(istream& is)
{
MlpParam mp;
for(int i=0; i<3; i++){int buf; is >> buf; mp.size.push_back(buf);}
for(int i=0; i<3; i++){bool buf; is >> buf; mp.act.push_back(buf);}
is.precision(10);
is >> scientific >> mp.eta;
is >> scientific >> mp.theta;
Init(mp);
}
void Mlp::Read(istream& is)
{
New(is);
for(int l=0; l<2; l++) is >> w[l];
}

大変長くなり申し訳ございません。