Sto lavorando con le reti neurali e voglio creare i pesi a caso. Quindi, se creo 30 reti neurali, ognuna di esse finisce per avere gli stessi pesi (che si suppone siano casuali), quindi quando do loro tutti lo stesso input l'output è lo stesso, quando non dovrebbe. Qualsiasi aiuto?C++ - default_random_engine crea sempre la stessa serie di numeri
Qui è la funzione principale
int main(){
std::vector<Improved_NN> v;
std::random_device rd;
std::default_random_engine generator(rd());
std::uniform_real_distribution<double> distribution(-1.0,1.0);
for(int i = 0; i < 30; i++)
{
Improved_NN temp;
temp.initialize_weights(generator, distribution);
v.push_back(temp);
}
Board temp;
for(int i = 0; i < 30; i++)
{
std::cout <<"\n" << v[i].executeFromExternal(temp);
}
E i initialize_weights è qui:
void Improved_NN::initialize_weights(std::default_random_engine gen,std::uniform_real_distribution<double> dist){
int k,v = 0;
for(k = 0;k<NUM_HIDDEN_1;k++){
for(v = 0 ; v < NUM_INPUTS; v++){
mlp_t.w_h1_i[k][v]=dist(gen);
//std::cout<<mlp_t.w_h1_i[k][v]<<std::endl;
}
}
for(k = 0;k<NUM_HIDDEN_2;k++){
for(v = 0 ; v < NUM_HIDDEN_1; v++){
mlp_t.w_h2_h1[k][v]=dist(gen);
//std::cout<<mlp_t.w_h2_h1[k][v]<<std::endl;
}
}
for(k = 0;k<NUM_HIDDEN_3;k++){
for(v = 0 ; v < NUM_HIDDEN_2; v++){
mlp_t.w_h3_h2[k][v]=dist(gen);
//std::cout<<mlp_t.w_h3_h2[k][v]<<std::endl;
}
}
for (int a = 0 ; a < NUM_HIDDEN_3;a++){
mlp_t.w_o_h[0][a] = dist(gen);
//std::cout<<mlp_t.w_o_h[0][a]<<std::endl;
}
}
Questa è l'uscita ottengo ogni volta che eseguo.
0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458 0,521458
La ringrazio molto.
torso solo generatore – user3018144