diff --git a/dimension_t/src/dimension_t/dimension_t.c b/dimension_t/src/dimension_t/dimension_t.c index 5edb934..26d2269 100644 --- a/dimension_t/src/dimension_t/dimension_t.c +++ b/dimension_t/src/dimension_t/dimension_t.c @@ -433,6 +433,15 @@ dimension * create_dim_from_list_perm( list_perm_in_dim *l_p){ return NULL; } +dimension * create_binary_dim(size_t dimension_size){ + dimension * dim = create_dim(dimension_size); + for(size_t i=0; iperm[i]=2; + updateRankDim(dim); + return dim; +} + + void free_list_perm_in_dim(list_perm_in_dim *l_p){ list_perm_in_dim *tmp=l_p, *ttmp; while(tmp){ diff --git a/dimension_t/src/dimension_t/dimension_t.h b/dimension_t/src/dimension_t/dimension_t.h index 18f46ca..ce9995a 100644 --- a/dimension_t/src/dimension_t/dimension_t.h +++ b/dimension_t/src/dimension_t/dimension_t.h @@ -70,6 +70,8 @@ typedef struct list_perm_in_dim list_perm_in_dim; void append_in_list_perm(list_perm_in_dim **list_p, size_t perm); dimension * create_dim_from_list_perm( list_perm_in_dim *l_p); +dimension * create_binary_dim(size_t dimension_size); + void free_list_perm_in_dim(list_perm_in_dim *l_p); #endif /* __DIMENSION_T__H__ */ diff --git a/neuron_t/src/neuron_t/neuron_t.c b/neuron_t/src/neuron_t/neuron_t.c index 1bc0334..4c1e1df 100644 --- a/neuron_t/src/neuron_t/neuron_t.c +++ b/neuron_t/src/neuron_t/neuron_t.c @@ -1,6 +1,6 @@ #include "neuron_t/neuron_t.h" -#define MAX(X, Y) (((X) > (Y)) ? (X) : (Y)) +//#define MAX(X, Y) (((X) > (Y)) ? (X) : (Y)) #define ABSMAX(X, Y) ((((X) > (Y)) || ((-X) > (Y)) ) ? (X) : (Y)) @@ -828,6 +828,16 @@ void update_cloneuronesets_weight_in_base_##type(cloneuronset_##type * clnrnst){ free(tmp_c);\ }\ \ +void copy_weight_in_neurons_##type(neurons_##type *dst_nrns, neurons_##type *src_nrns){\ + neurons_##type *tmp_src = src_nrns;\ + neurons_##type *tmp_dst = dst_nrns;\ + while(tmp_src){\ + copy_tensor_##type(tmp_dst->weight_in,tmp_src->weight_in);\ + tmp_src = tmp_src->next_layer;\ + tmp_dst = tmp_dst->next_layer;\ + }\ +}\ +\ type clon_error_batch_##type(cloneuronset_##type * clnrnst){\ \ type err=0;\ diff --git a/neuron_t/src/neuron_t/neuron_t.h b/neuron_t/src/neuron_t/neuron_t.h index 020f05c..8a7f268 100644 --- a/neuron_t/src/neuron_t/neuron_t.h +++ b/neuron_t/src/neuron_t/neuron_t.h @@ -65,6 +65,7 @@ void setup_learning_rate_params_neurons_##type(neurons_##type *base,type initial void calc_out_neurons_##type(neurons_##type *nr);\ void calc_delta_neurons_##type(neurons_##type *nr);\ void update_weight_neurons_##type(neurons_##type *nr);\ +void copy_weight_in_neurons_##type(neurons_##type *dst_nrns, neurons_##type *src_nrns);\ /*void setup_networks_##type(neurons_##type **base_nr, size_t **array_dim_in_layers, size_t *tab_sz_layers, size_t nb_layers);*/\ void init_copy_in_out_networks_from_tensors_##type(neurons_##type *nr, tensor_##type *input, tensor_##type *target);\ void init_in_out_networks_from_tensors_##type(neurons_##type *nr, tensor_##type *input, tensor_##type *target, neurons_##type *base);\ diff --git a/neuron_t/test/is_good.c b/neuron_t/test/is_good.c index 23b8386..a9a43eb 100644 --- a/neuron_t/test/is_good.c +++ b/neuron_t/test/is_good.c @@ -330,6 +330,52 @@ TEST(learning_cloneuroneset_LEARN_RATE){ } +TEST(copy_weight_in_neurons){ + bool rec_randomizeInitWeight = randomizeInitWeight; + randomizeInitWeight =false; + + data_set_TYPE_FLOAT *ds= fill_data_set_from_file_TYPE_FLOAT("xor.txt",1); +// print_data_set_msg_TYPE_FLOAT(ds,"data"); + config_layers *pconf = create_config_layers_from_OneD(3,(size_t[]){2,4,1}); /* 2 input , 1 target; 1 hidden layer with 5 neurons */ + neurons_TYPE_FLOAT *bn=NULL, *tmp ; + neurons_TYPE_FLOAT *cpyn=NULL; + //setup_networks_alloutputs_config_GLOBAL_rdm01_TYPE_FLOAT(setup_networks_alloutputs_config_TYPE_FLOAT(&bn,pconf);bn,pconf); + setup_networks_alloutputs_config_TYPE_FLOAT(&bn,pconf,false,0,1,5000); + setup_networks_alloutputs_config_TYPE_FLOAT(&cpyn, pconf,false,0,1,5000); + + setup_all_layers_functions_TYPE_FLOAT(bn, + tensorContractnProdThread_TYPE_FLOAT, + tensorProdThread_TYPE_FLOAT, + DL, + L, + f, + df); + + setup_all_layers_params_TYPE_FLOAT(bn, 5, 1 , 0.1); + + + size_t reps = learning_online2_neurons_TYPE_FLOAT(bn,ds,cond); + + copy_weight_in_neurons_TYPE_FLOAT(cpyn, bn); + + char msg[256]; + for(size_t i=0; isize; ++i){ + print_predict_by_network_with_error_neurons_TYPE_FLOAT(bn,ds->input[i],ds->target[i]); + print_predict_by_network_with_error_neurons_TYPE_FLOAT(cpyn,ds->input[i],ds->target[i]); + + } + + + + free_data_set_TYPE_FLOAT(ds); + free_neurons_TYPE_FLOAT(bn); + free_neurons_TYPE_FLOAT(cpyn); + + LOG("reps = %ld\n",reps); + randomizeInitWeight = rec_randomizeInitWeight; +} + + diff --git a/tensor_t/src/tensor_t/tensor_t.c b/tensor_t/src/tensor_t/tensor_t.c index b574b11..71068e1 100644 --- a/tensor_t/src/tensor_t/tensor_t.c +++ b/tensor_t/src/tensor_t/tensor_t.c @@ -129,6 +129,13 @@ tensor_##type* CLONE_TENSOR_##type(tensor_##type *tens){\ }\ return NULL;\ }\ +\ +void copy_tensor_##type(tensor_##type * dst, tensor_##type * src){\ + if(dst!=NULL && src!=NULL && dst->dim->rank == src->dim->rank){ \ + for(size_t i=0; i<(dst->dim)->rank;++i)\ + dst->x[i]=src->x[i];\ + }\ +}\ \ void free_tensor_##type(tensor_##type * tens){\ if(tens){\ diff --git a/tensor_t/src/tensor_t/tensor_t.h b/tensor_t/src/tensor_t/tensor_t.h index 38694c1..a1435e5 100644 --- a/tensor_t/src/tensor_t/tensor_t.h +++ b/tensor_t/src/tensor_t/tensor_t.h @@ -20,6 +20,7 @@ tensor_##type* CREATE_TENSOR_FROM_CPY_DIM_##type(dimension *dim);\ void _RECREATE_TENSOR_IF_NOT_THE_SAME_DIM_OR_NULL_##type(tensor_##type **M, dimension *dd);\ tensor_##type* CLONE_TENSOR_##type(tensor_##type *tens);\ void free_tensor_##type(tensor_##type * tens); \ +void copy_tensor_##type(tensor_##type * dst, tensor_##type * src);\ tensor_##type * sub_minus_tensor_head_##type(tensor_##type *rootens, size_t minuSubdim, size_t rankInDim); \ tensor_##type * sub_minus_tensor_tail_##type(tensor_##type *rootens, size_t minuSubdim, size_t rankInDim); \ tensor_##type * sub_tensor_head_##type(tensor_##type *rootens, size_t subdim, size_t rankInDim); \ diff --git a/tensor_t/test/is_good.c b/tensor_t/test/is_good.c index 933fd77..4164665 100644 --- a/tensor_t/test/is_good.c +++ b/tensor_t/test/is_good.c @@ -1676,6 +1676,35 @@ TEST(rec_in_file_tensor){ free_tensor_TYPE_FLOAT(M0); } +TEST(copy_tensor){ + dimension *d0=create_dim(3); + + d0->perm[0]=2; + d0->perm[1]=3; + d0->perm[2]=4; + + + updateRankDim(d0); + + + tensor_TYPE_FLOAT *M0 = CREATE_TENSOR_TYPE_FLOAT(d0); + tensor_TYPE_FLOAT *M1 = CREATE_TENSOR_FROM_CPY_DIM_TYPE_FLOAT(d0); + + LOG("M0->dim->rank = %ld\n",M0->dim->rank); + + init_random_x_TYPE_FLOAT(M0,2.7,5.4,50001); + init_random_x_TYPE_FLOAT(M1,2.7,5.4,50001); + + print_tensor_float(M0, "init M0 random"); + + copy_tensor_TYPE_FLOAT(M1, M0); + print_tensor_float(M1, "M1 copy of M0"); + + free_tensor_TYPE_FLOAT(M0); + free_tensor_TYPE_FLOAT(M1); +} + + diff --git a/ytest_t/include_ytest/include/tools_t/tools_t.h b/ytest_t/include_ytest/include/tools_t/tools_t.h index 2354538..57c6ee8 100644 --- a/ytest_t/include_ytest/include/tools_t/tools_t.h +++ b/ytest_t/include_ytest/include/tools_t/tools_t.h @@ -95,6 +95,8 @@ void gotoxy(int x, int y); #define FOREACH(array, size, function)\ for(size_t _ind = 0; _ind < size; ++_ind) function(array[_ind]); +#define MIN(X, Y) (((Y) < (X)) ? (Y) : (X)) +#define MAX(X, Y) (((Y) > (X)) ? (Y) : (X)) #define GENERATE_ALL(type)\ int COMPARE_N_##type(const void *,const void*);\ diff --git a/ytest_t/libytest.so b/ytest_t/libytest.so index 14eb8ab..1b54d93 100644 Binary files a/ytest_t/libytest.so and b/ytest_t/libytest.so differ diff --git a/ytools_t/include/tools_t/tools_t.h b/ytools_t/include/tools_t/tools_t.h index 2354538..57c6ee8 100644 --- a/ytools_t/include/tools_t/tools_t.h +++ b/ytools_t/include/tools_t/tools_t.h @@ -95,6 +95,8 @@ void gotoxy(int x, int y); #define FOREACH(array, size, function)\ for(size_t _ind = 0; _ind < size; ++_ind) function(array[_ind]); +#define MIN(X, Y) (((Y) < (X)) ? (Y) : (X)) +#define MAX(X, Y) (((Y) > (X)) ? (Y) : (X)) #define GENERATE_ALL(type)\ int COMPARE_N_##type(const void *,const void*);\