Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- const int t_rows=1000;
- double training_set_inputs[t_rows][2], training_set_outputs[t_rows];
- double teller, avgtot, avg, sqerrtot, f_out_requested,oldvalue;
- double reqf_out1,reqf_out1L,reqf_out1K,reqf_out1aL,reqf_out1aK,reqf_out2L,reqf_out2K,reqf_out1M,reqf_out1aM,reqf_out2M, reqf_out1a, reqf_out2, reqf_out3;
- double a_out[4],a_weight[4];
- double req_a_out[4];
- double f_out1K, f_out1aK,f_out2K, f_out3, f_out1L, f_out1aL, f_out2L, f_out1M, f_out1aM, f_out2M;
- double f_out1 = 0,f_out2 = 0, f_out1a = 0;
- double learn=0.06;
- double err;
- bool block1, block2, block3, block4, block0;
- int i=0,J;
- struct MiddleNode {
- double weight[2];
- double output[2];
- };
- struct InputNode {
- double weight[30];
- double output[30];
- };
- struct OutputNode {
- double weight[1];
- double output[1];
- };
- double outt2(double (*array)[t_rows][2], int b)
- {
- double calc;
- calc= pow((*array)[b][0],1)+2.5*pow((*array)[b][1],1);
- return calc;
- }
- double fx(double x)
- {
- return exp(x)-exp(-x)/(exp(x)+exp(-x));
- }
- double fd(double x)
- {
- return 4/pow((exp(x)+exp(-x)),2);
- }
- double set()
- {
- return 0.00;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- srand (time(NULL));
- InputNode inputnode[2];
- MiddleNode hiddennode[30];
- MiddleNode hiddennode2[2]; //2nd block of 'hidden' nodes
- OutputNode outputnode[1];
- for (int create = 0; create < t_rows; create++) {
- bool redo=false;
- do
- {
- training_set_inputs[create][0]= (rand() % 60) + 20.00;
- training_set_inputs[create][1]= (rand() % 60) + 20.00;
- training_set_outputs[create] = outt2(&training_set_inputs, create);
- if (training_set_outputs[create]==0) redo=true;
- } while (redo==true);
- }
- for(auto& rows: training_set_inputs)
- {
- for(auto& elem: rows)
- {
- elem = 1.00/elem;
- }
- }
- for (auto& number : training_set_outputs)
- {
- number = 1.00/number;
- }
- double requested_data1=21;double requested_data2=31;
- requested_data1=1.00/requested_data1;
- requested_data2=1.00/requested_data2;
- for (J = 0; J <= 29; J++) {
- inputnode[0].weight[J]=set();
- inputnode[1].weight[J] =set();
- hiddennode[J].weight[0] =set();
- hiddennode[J].weight[1] =set();
- }
- hiddennode2[0].weight[0] =set();
- hiddennode2[1].weight[0] =set();
- outputnode[0].weight[0] =set();
- teller=0;
- while (1)
- {
- i++;
- //int q = rand()%(t_rows);
- for (int q=0; q < t_rows; q++)
- {
- for (J = 0; J <= 29; J++) {
- inputnode[0].output[J] = fx(training_set_inputs[q][0] * inputnode[0].weight[J]);
- }
- for (J = 0; J <= 29; J++) {
- inputnode[1].output[J]= fx(training_set_inputs[q][1] * inputnode[1].weight[J]);
- }
- for (J = 0; J <= 29; J++) {
- hiddennode[J].output[0] = fx(inputnode[0].output[J] * hiddennode[J].weight[0] + inputnode[1].output[J] * hiddennode[J].weight[0]);
- }
- for (J = 0; J <= 29; J++) {
- hiddennode[J].output[1] = fx(inputnode[0].output[J] * hiddennode[J].weight[1] + inputnode[1].output[J] * hiddennode[J].weight[1]);
- }
- hiddennode2[0].output[0] = fx(hiddennode[0].output[0] * hiddennode2[0].weight[0] + hiddennode[1].output[0] * hiddennode2[0].weight[0]+ hiddennode[2].output[0] * hiddennode2[0].weight[0] + hiddennode[3].output[0] * hiddennode2[0].weight[0]+ hiddennode[4].output[0] * hiddennode2[0].weight[0]+ hiddennode[5].output[0] * hiddennode2[0].weight[0]+ hiddennode[6].output[0] * hiddennode2[0].weight[0]+ hiddennode[7].output[0] * hiddennode2[0].weight[0]+ hiddennode[8].output[0] * hiddennode2[0].weight[0]+ hiddennode[9].output[0] * hiddennode2[0].weight[0]+ hiddennode[10].output[0] * hiddennode2[0].weight[0]+ hiddennode[11].output[0] * hiddennode2[0].weight[0]+ hiddennode[12].output[0] * hiddennode2[0].weight[0]+ hiddennode[13].output[0] * hiddennode2[0].weight[0]+ hiddennode[14].output[0] * hiddennode2[0].weight[0]+ hiddennode[15].output[0] * hiddennode2[0].weight[0]+ hiddennode[16].output[0] * hiddennode2[0].weight[0]+ hiddennode[17].output[0] * hiddennode2[0].weight[0]+ hiddennode[18].output[0] * hiddennode2[0].weight[0]+ hiddennode[19].output[0] * hiddennode2[0].weight[0]+ hiddennode[20].output[0] * hiddennode2[0].weight[0]+ hiddennode[21].output[0] * hiddennode2[0].weight[0]+ hiddennode[22].output[0] * hiddennode2[0].weight[0]+ hiddennode[23].output[0] * hiddennode2[0].weight[0]+ hiddennode[24].output[0] * hiddennode2[0].weight[0]+ hiddennode[25].output[0] * hiddennode2[0].weight[0]+ hiddennode[26].output[0] * hiddennode2[0].weight[0]+ hiddennode[27].output[0] * hiddennode2[0].weight[0]+ hiddennode[28].output[0] * hiddennode2[0].weight[0]+ hiddennode[29].output[0] * hiddennode2[0].weight[0]);
- hiddennode2[1].output[0] = fx(hiddennode[0].output[1] * hiddennode2[1].weight[0] + hiddennode[1].output[1] * hiddennode2[1].weight[0]+ hiddennode[2].output[1] * hiddennode2[1].weight[0] + hiddennode[3].output[1] * hiddennode2[1].weight[0]+ hiddennode[4].output[1] * hiddennode2[1].weight[0]+ hiddennode[5].output[1] * hiddennode2[1].weight[0]+ hiddennode[6].output[1] * hiddennode2[1].weight[0]+ hiddennode[7].output[1] * hiddennode2[1].weight[0]+ hiddennode[8].output[1] * hiddennode2[1].weight[0]+ hiddennode[9].output[1] * hiddennode2[1].weight[0]+ hiddennode[10].output[1] * hiddennode2[1].weight[0]+ hiddennode[11].output[1] * hiddennode2[1].weight[0]+ hiddennode[12].output[1] * hiddennode2[1].weight[0]+ hiddennode[13].output[1] * hiddennode2[1].weight[0]+ hiddennode[14].output[1] * hiddennode2[1].weight[0]+ hiddennode[15].output[1] * hiddennode2[1].weight[0]+ hiddennode[16].output[1] * hiddennode2[1].weight[0]+ hiddennode[17].output[1] * hiddennode2[1].weight[0]+ hiddennode[18].output[1] * hiddennode2[1].weight[0]+ hiddennode[19].output[1] * hiddennode2[1].weight[0]+ hiddennode[20].output[1] * hiddennode2[1].weight[0]+ hiddennode[21].output[1] * hiddennode2[1].weight[0]+ hiddennode[22].output[1] * hiddennode2[1].weight[0]+ hiddennode[23].output[1] * hiddennode2[1].weight[0]+ hiddennode[24].output[1] * hiddennode2[1].weight[0]+ hiddennode[25].output[1] * hiddennode2[1].weight[0]+ hiddennode[26].output[1] * hiddennode2[1].weight[0]+ hiddennode[27].output[1] * hiddennode2[1].weight[0]+ hiddennode[28].output[1] * hiddennode2[1].weight[0]+ hiddennode[29].output[1] * hiddennode2[1].weight[0]);
- outputnode[0].output[0] = fx(hiddennode2[0].output[0] * outputnode[0].weight[0]+hiddennode2[1].output[0] * outputnode[0].weight[0]);
- err = 2*( outputnode[0].output[0] - training_set_outputs[q] );
- sqerrtot = sqerrtot + pow( outputnode[0].output[0] - training_set_outputs[q],2);
- for (J = 0; J <= 29; J++) {
- inputnode[0].weight[J] -= learn * err * training_set_inputs[q][0] * fd(inputnode[0].output[J]) * hiddennode[J].weight[0] *hiddennode2[0].weight[0]* outputnode[0].weight[0];
- }
- for (J = 0; J <= 29; J++) {
- inputnode[0].weight[J] -= learn * err * training_set_inputs[q][0] * fd(inputnode[0].output[J]) * hiddennode[J].weight[0] *hiddennode2[1].weight[0]* outputnode[0].weight[0];
- }
- for (J = 0; J <= 29; J++) {
- inputnode[1].weight[J] -= learn * err * training_set_inputs[q][1] * fd(inputnode[1].output[J]) * hiddennode[J].weight[0]* hiddennode2[0].weight[0] * outputnode[0].weight[0];
- }
- for (J = 0; J <= 29; J++) {
- inputnode[1].weight[J] -= learn * err * training_set_inputs[q][1] * fd(inputnode[1].output[J]) * hiddennode[J].weight[0]* hiddennode2[1].weight[0] * outputnode[0].weight[0];
- }
- for (J = 0; J <= 29; J++) {
- hiddennode[J].weight[0] -= learn * err * (inputnode[0].output[J]+inputnode[1].output[J]) * fd(hiddennode[J].output[0]) *hiddennode2[0].weight[0]* outputnode[0].weight[0];
- }
- for (J = 0; J <= 29; J++) {
- hiddennode[J].weight[0] -= learn * err * (inputnode[0].output[J]+inputnode[1].output[J]) * fd(hiddennode[J].output[0]) *hiddennode2[1].weight[0]* outputnode[0].weight[0];
- }
- hiddennode2[0].weight[0] -= learn * err * (hiddennode[0].output[0]+hiddennode[1].output[0]+hiddennode[2].output[0]+hiddennode[3].output[0]+hiddennode[4].output[0]+hiddennode[5].output[0]+hiddennode[6].output[0]+hiddennode[7].output[0]+hiddennode[8].output[0]+hiddennode[9].output[0]+hiddennode[10].output[0]+hiddennode[11].output[0]+hiddennode[12].output[0]+hiddennode[13].output[0]+hiddennode[14].output[0]+hiddennode[15].output[0]+hiddennode[16].output[0]+hiddennode[17].output[0]+hiddennode[18].output[0]+hiddennode[19].output[0]+hiddennode[20].output[0]+hiddennode[21].output[0]+hiddennode[22].output[0]+hiddennode[23].output[0]+hiddennode[24].output[0]+hiddennode[25].output[0]+hiddennode[26].output[0]+hiddennode[27].output[0]+hiddennode[28].output[0]+hiddennode[29].output[0])*fd(hiddennode2[0].output[0])*outputnode[0].weight[0];
- hiddennode2[1].weight[0] -= learn * err * (hiddennode[0].output[1]+hiddennode[1].output[1]+hiddennode[2].output[1]+hiddennode[3].output[1]+hiddennode[4].output[1]+hiddennode[5].output[1]+hiddennode[6].output[1]+hiddennode[7].output[1]+hiddennode[8].output[1]+hiddennode[9].output[1]+hiddennode[10].output[1]+hiddennode[11].output[1]+hiddennode[12].output[1]+hiddennode[13].output[1]+hiddennode[14].output[1]+hiddennode[15].output[1]+hiddennode[16].output[1]+hiddennode[17].output[1]+hiddennode[18].output[1]+hiddennode[19].output[1]+hiddennode[20].output[1]+hiddennode[21].output[1]+hiddennode[22].output[1]+hiddennode[23].output[1]+hiddennode[24].output[1]+hiddennode[25].output[1]+hiddennode[26].output[1]+hiddennode[27].output[1]+hiddennode[28].output[1]+hiddennode[29].output[1])*fd(hiddennode2[1].output[0])*outputnode[0].weight[0];
- outputnode[0].weight[0] -= learn * err * (hiddennode2[0].output[0]) * fd(outputnode[0].output[0]);
- }
- //if (i>20000)
- if (int(i)%15==1) {
- for (J = 0; J <= 29; J++) {
- inputnode[0].output[J] = fx(requested_data1 * inputnode[0].weight[J]);
- }
- for (J = 0; J <= 29; J++) {
- inputnode[1].output[J]= fx(requested_data2 * inputnode[1].weight[J]);
- }
- for (J = 0; J <= 29; J++) {
- hiddennode[J].output[0] = fx(inputnode[0].output[J] * hiddennode[J].weight[0] + inputnode[1].output[J] * hiddennode[J].weight[0]);
- }
- for (J = 0; J <= 29; J++) {
- hiddennode[J].output[1] = fx(inputnode[0].output[J] * hiddennode[J].weight[1] + inputnode[1].output[J] * hiddennode[J].weight[1]);
- }
- hiddennode2[0].output[0] = fx(hiddennode[0].output[0] * hiddennode2[0].weight[0] + hiddennode[1].output[0] * hiddennode2[0].weight[0]+ hiddennode[2].output[0] * hiddennode2[0].weight[0] + hiddennode[3].output[0] * hiddennode2[0].weight[0]+ hiddennode[4].output[0] * hiddennode2[0].weight[0]+ hiddennode[5].output[0] * hiddennode2[0].weight[0]+ hiddennode[6].output[0] * hiddennode2[0].weight[0]+ hiddennode[7].output[0] * hiddennode2[0].weight[0]+ hiddennode[8].output[0] * hiddennode2[0].weight[0]+ hiddennode[9].output[0] * hiddennode2[0].weight[0]+ hiddennode[10].output[0] * hiddennode2[0].weight[0]+ hiddennode[11].output[0] * hiddennode2[0].weight[0]+ hiddennode[12].output[0] * hiddennode2[0].weight[0]+ hiddennode[13].output[0] * hiddennode2[0].weight[0]+ hiddennode[14].output[0] * hiddennode2[0].weight[0]+ hiddennode[15].output[0] * hiddennode2[0].weight[0]+ hiddennode[16].output[0] * hiddennode2[0].weight[0]+ hiddennode[17].output[0] * hiddennode2[0].weight[0]+ hiddennode[18].output[0] * hiddennode2[0].weight[0]+ hiddennode[19].output[0] * hiddennode2[0].weight[0]+ hiddennode[20].output[0] * hiddennode2[0].weight[0]+ hiddennode[21].output[0] * hiddennode2[0].weight[0]+ hiddennode[22].output[0] * hiddennode2[0].weight[0]+ hiddennode[23].output[0] * hiddennode2[0].weight[0]+ hiddennode[24].output[0] * hiddennode2[0].weight[0]+ hiddennode[25].output[0] * hiddennode2[0].weight[0]+ hiddennode[26].output[0] * hiddennode2[0].weight[0]+ hiddennode[27].output[0] * hiddennode2[0].weight[0]+ hiddennode[28].output[0] * hiddennode2[0].weight[0]+ hiddennode[29].output[0] * hiddennode2[0].weight[0]);
- hiddennode2[1].output[0] = fx(hiddennode[0].output[1] * hiddennode2[1].weight[0] + hiddennode[1].output[1] * hiddennode2[1].weight[0]+ hiddennode[2].output[1] * hiddennode2[1].weight[0] + hiddennode[3].output[1] * hiddennode2[1].weight[0]+ hiddennode[4].output[1] * hiddennode2[1].weight[0]+ hiddennode[5].output[1] * hiddennode2[1].weight[0]+ hiddennode[6].output[1] * hiddennode2[1].weight[0]+ hiddennode[7].output[1] * hiddennode2[1].weight[0]+ hiddennode[8].output[1] * hiddennode2[1].weight[0]+ hiddennode[9].output[1] * hiddennode2[1].weight[0]+ hiddennode[10].output[1] * hiddennode2[1].weight[0]+ hiddennode[11].output[1] * hiddennode2[1].weight[0]+ hiddennode[12].output[1] * hiddennode2[1].weight[0]+ hiddennode[13].output[1] * hiddennode2[1].weight[0]+ hiddennode[14].output[1] * hiddennode2[1].weight[0]+ hiddennode[15].output[1] * hiddennode2[1].weight[0]+ hiddennode[16].output[1] * hiddennode2[1].weight[0]+ hiddennode[17].output[1] * hiddennode2[1].weight[0]+ hiddennode[18].output[1] * hiddennode2[1].weight[0]+ hiddennode[19].output[1] * hiddennode2[1].weight[0]+ hiddennode[20].output[1] * hiddennode2[1].weight[0]+ hiddennode[21].output[1] * hiddennode2[1].weight[0]+ hiddennode[22].output[1] * hiddennode2[1].weight[0]+ hiddennode[23].output[1] * hiddennode2[1].weight[0]+ hiddennode[24].output[1] * hiddennode2[1].weight[0]+ hiddennode[25].output[1] * hiddennode2[1].weight[0]+ hiddennode[26].output[1] * hiddennode2[1].weight[0]+ hiddennode[27].output[1] * hiddennode2[1].weight[0]+ hiddennode[28].output[1] * hiddennode2[1].weight[0]+ hiddennode[29].output[1] * hiddennode2[1].weight[0]);
- outputnode[0].output[0] = fx(hiddennode2[0].output[0] * outputnode[0].weight[0]+hiddennode2[1].output[0] * outputnode[0].weight[0]);
- oldvalue = f_out_requested;
- f_out_requested = 1.00/outputnode[0].output[0];
- teller = teller +1.00;
- avgtot = avgtot + abs(f_out_requested);
- avg=avgtot/teller;
- printf("\n\n%d Error: %.19lf Output for value %lf as new requested1 data req2 %lf ,output %.20lf,average: %.2lf diff: %lf",i,sqerrtot,1.00/requested_data1,1.00/requested_data2,f_out_requested,avg, oldvalue-f_out_requested );
- sqerrtot = 0;
- if (teller==100) { teller=0;avgtot=0;}
- }
- }
- scanf("%d", &i);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment