fann_train_epoch

(PECL fann >= 1.0.0)

fann_train_epoch使用一组训练数据训练一个周期。

说明

fann_train_epoch(resource $ann, resource $data): float

使用保存在 data 中训练数据训练一个周期。一个训练周期表示所有的训练数据正好使用了一次。

这个函数将会返回在其实际计算之前或当中被计算的 MSE 错误。但是因为计算需要再次走一遍整个训练集,所有训练周期之后的不是真正的 MSE。 在训练中使用这个值是绰绰有余的。

该函数使用的是被 fann_set_training_algorithm() 函数选中的训练算法。

参数

ann

神经网络 资源

data

神经网络训练数据 资源

返回值

成功,则返回 MSE, 错误则返回 false .

参见

添加备注

用户贡献的备注 1 note

up
2
geekgirljoy at gmail dot com
6 years ago
This code demonstrates training XOR using fann_train_epoch and will let you watch the training process by observing a psudo MSE (mean squared error).Other training functions: fann_train_on_data, fann_train_on_file, fann_train.fann_train_epoch is useful when you want to observe the ANN while it is training and perhaps save snapshots or compare competing networks during training. fann_train_epoch is different from fann_train in that it takes a data resource (training file) whereas fann_train takes an array of inputs and a separate array of outputs so use fann_train_epoch for observing training on data files (callback training resources) and use fann_train when observing manually specified data. Example code: <?php$num_input = 2;$num_output = 1;$num_layers = 3; $num_neurons_hidden = 3; $desired_error = 0.0001;$max_epochs = 500000;$current_epoch = 0;$epochs_between_saves = 100; // Minimum number of epochs between saves$epochs_since_last_save = 0;$filename = dirname(__FILE__) . "/xor.data";// Initialize psudo mse (mean squared error) to a number greater than the desired_error// this is what the network is trying to minimize.$psudo_mse_result = $desired_error * 10000; // 1$best_mse = $psudo_mse_result; // keep the last best seen MSE network score here// Initialize ANN$ann = fann_create_standard($num_layers, $num_input, $num_neurons_hidden, $num_output);if ($ann) {  echo 'Training ANN... ' . PHP_EOL;     // Configure the ANN  fann_set_training_algorithm ($ann , FANN_TRAIN_BATCH);  fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);  fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);    // Read training data  $train_data = fann_read_train_from_file($filename);      // Check if psudo_mse_result is greater than our desired_error   // if so keep training so long as we are also under max_epochs  while(($psudo_mse_result > $desired_error) && ($current_epoch <= $max_epochs)){    $current_epoch++;    $epochs_since_last_save++;        // See: http://php.net/manual/en/function.fann-train-epoch.php    // Train one epoch with the training data stored in data.     //    // One epoch is where all of the training data is considered     // exactly once.    //    // This function returns the MSE error as it is calculated     // either before or during the actual training. This is not the     // actual MSE after the training epoch, but since calculating this     // will require to go through the entire training set once more.     // It is more than adequate to use this value during training.    $psudo_mse_result = fann_train_epoch ($ann , $train_data );    echo 'Epoch ' . $current_epoch . ' : ' . $psudo_mse_result . PHP_EOL; // report            // If we haven't saved the ANN in a while...    // and the current network is better then the previous best network    // as defined by the current MSE being less than the last best MSE    // Save it!    if(($epochs_since_last_save >= $epochs_between_saves) && ($psudo_mse_result < $best_mse)){            $best_mse = $psudo_mse_result; // we have a new best_mse            // Save a Snapshot of the ANN      fann_save($ann, dirname(__FILE__) . "/xor.net");      echo 'Saved ANN.' . PHP_EOL; // report the save      $epochs_since_last_save = 0; // reset the count    }    } // While we're training  echo 'Training Complete! Saving Final Network.'  . PHP_EOL;    // Save the final network  fann_save($ann, dirname(__FILE__) . "/xor.net");    fann_destroy($ann); // free memory}echo 'All Done!' . PHP_EOL;?>
To Top