這段程式碼示範了使用 fann_train_epoch 訓練 XOR,並讓您透過觀察虛擬 MSE(均方誤差)來觀察訓練過程。
其他訓練函式:fann_train_on_data、fann_train_on_file、fann_train。
當您想要在訓練時觀察人工神經網路,並且可能儲存快照或在訓練期間比較競爭網路時,fann_train_epoch 很有用。
fann_train_epoch 與 fann_train 的不同之處在於它採用資料資源(訓練檔案),而 fann_train 採用輸入陣列和單獨的輸出陣列,因此使用 fann_train_epoch 來觀察資料檔案(回呼訓練資源)上的訓練,並在觀察手動指定的資料時使用 fann_train。
程式碼範例
<?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; $epochs_since_last_save = 0;
$filename = dirname(__FILE__) . "/xor.data";
$psudo_mse_result = $desired_error * 10000; $best_mse = $psudo_mse_result; $ann = fann_create_standard($num_layers, $num_input, $num_neurons_hidden, $num_output);
if ($ann) {
echo 'Training ANN... ' . PHP_EOL;
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);
$train_data = fann_read_train_from_file($filename);
while(($psudo_mse_result > $desired_error) && ($current_epoch <= $max_epochs)){
$current_epoch++;
$epochs_since_last_save++;
$psudo_mse_result = fann_train_epoch ($ann , $train_data );
echo 'Epoch ' . $current_epoch . ' : ' . $psudo_mse_result . PHP_EOL; if(($epochs_since_last_save >= $epochs_between_saves) && ($psudo_mse_result < $best_mse)){
$best_mse = $psudo_mse_result; fann_save($ann, dirname(__FILE__) . "/xor.net");
echo 'Saved ANN.' . PHP_EOL; $epochs_since_last_save = 0; }
} echo 'Training Complete! Saving Final Network.' . PHP_EOL;
fann_save($ann, dirname(__FILE__) . "/xor.net");
fann_destroy($ann); }
echo 'All Done!' . PHP_EOL;
?>