main.cpp 2.0 KB
Newer Older
sahduashufa's avatar
0.0  
sahduashufa 已提交
1 2 3 4 5
#include<iostream>
#include<ctime>
#include<string>
#include <time.h>
#include <math.h>
sahduashufa's avatar
sahduashufa 已提交
6
#include <fstream>
sahduashufa's avatar
sahduashufa 已提交
7
#include "./autodiff/node.h"
sahduashufa's avatar
sahduashufa 已提交
8
#include"./matrix/matrix_def.h"
sahduashufa's avatar
1.1  
sahduashufa 已提交
9
#include"./matrix/matrix_pro.h"
sahduashufa's avatar
0.0  
sahduashufa 已提交
10
#include"./welcome/score_wel.cpp"
sahduashufa's avatar
1.1  
sahduashufa 已提交
11
#include"./logistic/logistic_def.h"
sahduashufa's avatar
sahduashufa 已提交
12
#include"./file_pro/data_read.h"
sahduashufa's avatar
sahduashufa 已提交
13
#include"./grad_edge/matrix_grad.h"
sahduashufa's avatar
0.0  
sahduashufa 已提交
14
using namespace std;
sahduashufa's avatar
1.1  
sahduashufa 已提交
15 16
clock_t start, stop;
double duration;
sahduashufa's avatar
sahduashufa 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30
Node z=1;
Node t1 = 1,a13 = 1;
Node loss_act(Node t1,Node a13)
{
	 Node loss = 0.5*(pow((t1-a13),2));
	 return loss;
}
Node sigmoid_act(Node z)
{
Node sigmoid_act = 1/(1+(1/exp(z)));
return sigmoid_act;
}
Node (*loss)(Node,Node) = loss_act;
Node (*act)(Node) = sigmoid_act;
sahduashufa's avatar
0.0  
sahduashufa 已提交
31
int main()
sahduashufa's avatar
sahduashufa 已提交
32
{
sahduashufa's avatar
sahduashufa 已提交
33
	cout<<"------------autodiff for neraul network-----------"<<endl;
sahduashufa's avatar
sahduashufa 已提交
34 35 36 37 38
	Matrix data_mine = CreateMatrix(2,1);
	cout<<"data mine"<<endl;
	cout_mat(data_mine);
	cout<<"data mine"<<endl;
	Matrix label = CreateRandMat(2,1);
sahduashufa's avatar
sahduashufa 已提交
39
	Matrix weight1 = CreateRandMat(2,2);
sahduashufa's avatar
sahduashufa 已提交
40
	Matrix bais1 = ones(2,1);
sahduashufa's avatar
sahduashufa 已提交
41
	Matrix weight2 = CreateRandMat(2,2);
sahduashufa's avatar
sahduashufa 已提交
42
	Matrix bais2 = ones(2,1);
sahduashufa's avatar
sahduashufa 已提交
43
	for(int epoch = 0;epoch<1;epoch++)
sahduashufa's avatar
sahduashufa 已提交
44
	{
sahduashufa's avatar
sahduashufa 已提交
45
	cout<<"---------epoch: "<<epoch<<"------------"<<endl;
sahduashufa's avatar
sahduashufa 已提交
46
	cout_mat(weight1);
sahduashufa's avatar
sahduashufa 已提交
47 48 49 50 51 52 53
	int input_dim = 2;
	int output_dim = 2;
	edge_network sequaltial(input_dim,output_dim);
	Matrix output1 = sequaltial.forward(data_mine,weight1,bais1);
	Matrix output1_without_act = sequaltial.forward_without_act(data_mine,weight1,bais1);
	Matrix output2 = sequaltial.forward(output1,weight2,bais2);
	Matrix output2_without_act = sequaltial.forward_without_act(output1,weight2,bais2);	
sahduashufa's avatar
sahduashufa 已提交
54 55
	Matrix output_end = sequaltial.end_layer_backward(label,output2_without_act,*loss,*act);
	Matrix backward3 = sequaltial.backward(output_end,output1_without_act,weight2,*act);
sahduashufa's avatar
sahduashufa 已提交
56 57 58 59 60 61
	Matrix weight_2_grad = mul(output_end,get_T(output1));
	Matrix weight_1_grad = mul(backward3,get_T(data_mine));
	weight1 = subtract(weight1,times_mat(0.001,weight_1_grad));
	bais1 = subtract(bais1,times_mat(0.001,backward3));
	weight2 = subtract(weight2,times_mat(0.001,weight_2_grad));
	bais2 = subtract(bais2,times_mat(0.001,output_end));
sahduashufa's avatar
sahduashufa 已提交
62
	cout<<"neraul end;"<<endl;
sahduashufa's avatar
0.0  
sahduashufa 已提交
63
	return 0;
64 65
	}
}