iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 20
0
AI & Data

學習PHP Machine Learning的冒險歷程系列 第 20

[2020鐵人賽Day20]邂逅PHP Machine Learning-類神經網路(NN)-鳶尾花分類

前言

今天我們來介紹NN的訓練與模型建立,NN可以調整的參數很多,可以根據數據的特性去調整架構。我們從Sample + 鳶尾花分類來解釋。

程式碼說明

<?php
    require_once __DIR__ . '/vendor/autoload.php';

    use Phpml\Dataset\CsvDataset;
    use Phpml\Classification\MLPClassifier;
    use Phpml\NeuralNetwork\ActivationFunction\PReLU;
    use Phpml\NeuralNetwork\ActivationFunction\Sigmoid;

    //讀取Excel
    $dataset = new CsvDataset('iris.csv',4);
    
    //取得相關數值
    $getSample = $dataset->getSamples();
    $getTargets = $dataset->getTargets();

    //取出分類
    $targetsSingle = Array();
    for($i=0; $i<count($getTargets); $i++){
        if(!in_array($getTargets[$i], $targetsSingle)){
            $targetsSingle[] = $getTargets[$i];
        }
    }
    
    //陣列內容字串轉float
    $getSampleFloat= Array();
    for($i=0; $i<count($getSample); $i++){
        for($t=0; $t<count($getSample[$i]); $t++){
            $getSampleFloat[$i][$t] = (float)$getSample[$i][$t];
        }   
    }

    //$mlp = new MLPClassifier(Sample的數量, [[第一個隱藏層(兩個神經元), new 激活函數, [第二個隱藏層(兩個神經元), new 激活函數]], [分類的三種類別]);
   //以鳶尾花資料集來解釋,4為Sample的種類,一共有四個
    // MLP的架構可以用一個二維的陣列表示,[2, new PReLU]表示一層的隱藏層,2是神經元數,new PReLU是激活函數。
    //本次使用的MLP共有兩層隱藏層
    //targetsSingle則是一個一維陣列,是輸出的答案。
    $mlp = new MLPClassifier(4, [[2, new PReLU], [2, new Sigmoid]], $targetsSingle);

    //訓練MLP僅提供樣本樣本和標籤
    $mlp->train(
        $samples = $getSampleFloat,  // 這個標籤代表四個Sample類別的二維陣列。
        $targets = $getSampleFloat    // 這是Target,需要跟MLPClassifier的輸出答案之類別一樣,就是那三種鳶尾花
    );

    echo("<pre>");
    var_dump($mlp);
    echo("</pre>");
    exit();
?>

結語

這樣我們就可以利用鳶尾花的資料集作訓練,然後明天可以測試看看成果如何。
訓練樣本與測試樣本也要80%與20%。


上一篇
[2020鐵人賽Day19]邂逅PHP Machine Learning-類神經網路(NN)-學習率
下一篇
[2020鐵人賽Day21] 邂逅PHP Machine Learning-類神經網路(NN)-鳶尾花分類(無標準化)
系列文
學習PHP Machine Learning的冒險歷程30

尚未有邦友留言

立即登入留言