私は Java で初めてのニューラル ネットワークを構築しており、この C++ の例をオンラインでフォローしています。
vector<double> CNeuralNet::Update(vector<double> &inputs)
{
//stores the resultant outputs from each layer
vector<double> outputs;
int cWeight = 0;
//first check that we have the correct amount of inputs
if (inputs.size() != m_NumInputs)
{
//just return an empty vector if incorrect.
return outputs;
}
//For each layer....
for (int i=0; i<m_NumHiddenLayers + 1; ++i)
{
if ( i > 0 )
{
inputs = outputs;
}
outputs.clear();
cWeight = 0;
//for each neuron sum the (inputs * corresponding weights).Throw
//the total at our sigmoid function to get the output.
for (int j=0; j<m_vecLayers[i].m_NumNeurons; ++j)
{
double netinput = 0;
int NumInputs = m_vecLayers[i].m_vecNeurons[j].m_NumInputs;
//for each weight
for (int k=0; k<NumInputs - 1; ++k)
{
//sum the weights x inputs
netinput += m_vecLayers[i].m_vecNeurons[j].m_vecWeight[k] *
inputs[cWeight++];
}
//add in the bias
netinput += m_vecLayers[i].m_vecNeurons[j].m_vecWeight[NumInputs-1] *
CParams::dBias;
//we can store the outputs from each layer as we generate them.
//The combined activation is first filtered through the sigmoid
//function
outputs.push_back(Sigmoid(netinput, CParams::dActivationResponse));
cWeight = 0;
}
}
return outputs;
}
このコードに関して 2 つの質問があります。まず、一見すると...出力への入力の奇妙な割り当て
//For each layer....
for (int i=0; i<m_NumHiddenLayers + 1; ++i)
{
if ( i > 0 )
{
inputs = outputs;
}
outputs.clear();
この部分は本当に私を混乱させます。彼は出力を作成したばかりです...なぜ彼は出力を入力に割り当てるのでしょうか? また、なぜ ++i なのですか? 私が知る限り、これより前の彼のコードでは、彼はまだインデックス [0] を使用しています。これは私が行っていることです。なぜ突然の変更?この最後のものを残す理由はありますか?これは、残りのコード例がないとわかりにくい質問かもしれません...
私の2番目の質問は
//add in the bias
netinput += m_vecLayers[i].m_vecNeurons[j].m_vecWeight[NumInputs-1] *
CParams::dBias;
//we can store the outputs from each layer as we generate them.
//The combined activation is first filtered through the sigmoid
//function
outputs.push_back(Sigmoid(netinput, CParams::dActivationResponse));
CParams::dBias と CParams::dActivationResponse は、この前には現れません。このためにサブインする 2 つの静的最終グローバルを作成しました。私は正しい軌道に乗っていますか?
どんな助けでも大歓迎です。これは個人的なプロジェクトであり、2 週間前に初めて知って以来、このテーマについて考えるのをやめることができませんでした。