add macro MIN MAX in toom_t, and add copy tensor and weight_in neurons

This commit is contained in:
2024-06-11 21:40:39 +02:00
parent b3de7fb171
commit 99e87a7b5b
11 changed files with 110 additions and 1 deletions
@@ -433,6 +433,15 @@ dimension * create_dim_from_list_perm( list_perm_in_dim *l_p){
return NULL; return NULL;
} }
dimension * create_binary_dim(size_t dimension_size){
dimension * dim = create_dim(dimension_size);
for(size_t i=0; i<dimension_size; ++i)
dim->perm[i]=2;
updateRankDim(dim);
return dim;
}
void free_list_perm_in_dim(list_perm_in_dim *l_p){ void free_list_perm_in_dim(list_perm_in_dim *l_p){
list_perm_in_dim *tmp=l_p, *ttmp; list_perm_in_dim *tmp=l_p, *ttmp;
while(tmp){ while(tmp){
@@ -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); 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_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); void free_list_perm_in_dim(list_perm_in_dim *l_p);
#endif /* __DIMENSION_T__H__ */ #endif /* __DIMENSION_T__H__ */
+11 -1
View File
@@ -1,6 +1,6 @@
#include "neuron_t/neuron_t.h" #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)) #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);\ 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 clon_error_batch_##type(cloneuronset_##type * clnrnst){\
\ \
type err=0;\ type err=0;\
+1
View File
@@ -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_out_neurons_##type(neurons_##type *nr);\
void calc_delta_neurons_##type(neurons_##type *nr);\ void calc_delta_neurons_##type(neurons_##type *nr);\
void update_weight_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 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_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);\ void init_in_out_networks_from_tensors_##type(neurons_##type *nr, tensor_##type *input, tensor_##type *target, neurons_##type *base);\
+46
View File
@@ -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; i<ds->size; ++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;
}
+7
View File
@@ -129,6 +129,13 @@ tensor_##type* CLONE_TENSOR_##type(tensor_##type *tens){\
}\ }\
return NULL;\ 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){\ void free_tensor_##type(tensor_##type * tens){\
if(tens){\ if(tens){\
+1
View File
@@ -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);\ void _RECREATE_TENSOR_IF_NOT_THE_SAME_DIM_OR_NULL_##type(tensor_##type **M, dimension *dd);\
tensor_##type* CLONE_TENSOR_##type(tensor_##type *tens);\ tensor_##type* CLONE_TENSOR_##type(tensor_##type *tens);\
void free_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_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_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); \ tensor_##type * sub_tensor_head_##type(tensor_##type *rootens, size_t subdim, size_t rankInDim); \
+29
View File
@@ -1676,6 +1676,35 @@ TEST(rec_in_file_tensor){
free_tensor_TYPE_FLOAT(M0); 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);
}
@@ -95,6 +95,8 @@ void gotoxy(int x, int y);
#define FOREACH(array, size, function)\ #define FOREACH(array, size, function)\
for(size_t _ind = 0; _ind < size; ++_ind) function(array[_ind]); 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)\ #define GENERATE_ALL(type)\
int COMPARE_N_##type(const void *,const void*);\ int COMPARE_N_##type(const void *,const void*);\
Binary file not shown.
+2
View File
@@ -95,6 +95,8 @@ void gotoxy(int x, int y);
#define FOREACH(array, size, function)\ #define FOREACH(array, size, function)\
for(size_t _ind = 0; _ind < size; ++_ind) function(array[_ind]); 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)\ #define GENERATE_ALL(type)\
int COMPARE_N_##type(const void *,const void*);\ int COMPARE_N_##type(const void *,const void*);\