iris/というフォルダ内に以下のファイルを配置する。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>アヤメの品種判定</title>
</head>
<body>
<h1>アヤメの品種判定</h1>
<p>判定したいアヤメのデータを入力してください。</p>
<form method="post" action="judge.php">
<p>がく片の長さ:<input type=text size=10 name="SepalLength"/></p>
<p>がく片の幅:<input type=text size=10 name="SepalWidth"/></p>
<p>花びらの長さ:<input type=text size=10 name="PetalLength"/></p>
<p>花びらの幅:<input type=text size=10 name="PetalWidth"/></p>
<input type=submit value="判定"/>
</form>
<form method="post" action="learn.php">
<input type=submit value="学習"/>
</form>
</body>
</html><?php
function judge(){
$r=rand(0,2);
switch($r){
case 0: return "Iris-setosa";
case 1: return "Iris-versicolor";
case 2: return "Iris-virginica";
}
return "どれでもない";
}
function judge2(){
$sl=$_POST['SepalLength'];
$sw=$_POST['SepalWidth'];
$pl=$_POST['PetalLength'];
$pw=$_POST['PetalWidth'];
print("<p>sl=".$sl." pw=".$pw."</p>");
if($sl<5){ return "Iris-setosa"; }
if($pw<5){ return "Iris-versicolor"; }
return "Iris-virginica";
}
function judge3(){
$sl=$_POST['SepalLength'];
$sw=$_POST['SepalWidth'];
$pl=$_POST['PetalLength'];
$pw=$_POST['PetalWidth'];
$python="/home/kisa2019/.pyenv/shims/python";
$res=exec("$python judge.py $sl $sw $pl $pw 2>&1",$opt);
#return "<pre>".join("\n",$opt)."</pre>";
return $res;
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>判定結果</title>
</head>
<body>
<h1>判定結果</h1>
<p>sl=<?php echo $sl ?> sw=<?php echo $sw ?> pl=<?php echo $pl ?> pw=<?php echo $pw ?></p>
<p>品種は<?php print(judge3()); ?>です。</p>
<p><a href="index.html">戻る</a></p>
</body>
</html>import sys
import tensorflow as tf
import keras
import numpy as np
# 引数の受け取り
sl=float(sys.argv[1])
sw=float(sys.argv[2])
pl=float(sys.argv[3])
pw=float(sys.argv[4])
# モデルの読み込み
model=keras.models.load_model("iris_model.h5")
# 判定
data=np.array([[sl,sw,pl,pw]])
res=model.predict(data)
print(res)<?php
$python="/home/kisa2019/.pyenv/shims/python";
$res=exec("$python learn.py 2>&1",$opt);
$msg="<pre>".join("\n",$opt)."</pre>";
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>学習完了</title>
</head>
<body>
<h1>学習完了</h1>
<p><?php print $res ?></p>
<p><a href="index.html">戻る</a></p>
</body>
</html>import tensorflow as tf
import tensorflow.contrib.keras as keras
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np
# アヤメデータの読み込み --- (*1)
iris_data = pd.read_csv("iris.csv", encoding="utf-8")
# アヤメデータをラベルと入力データに分離する
y_labels = iris_data.loc[:,"Name"]
x_data = iris_data.loc[:,["SepalLength","SepalWidth","PetalLength","PetalWidth"]]
# ラベルデータをone-hotベクトルに直す
labels = {
'Iris-setosa': [1, 0, 0],
'Iris-versicolor': [0, 1, 0],
'Iris-virginica': [0, 0, 1]
}
y_nums = np.array(list(map(lambda v : labels[v] , y_labels)))
x_data = np.array(x_data)
# 学習用とテスト用に分割する --- (*2)
x_train, x_test, y_train, y_test = train_test_split(
x_data, y_nums, train_size=0.8)
# モデル構造を定義 --- (*3)
Dense = keras.layers.Dense
model = keras.models.Sequential()
model.add(Dense(10, activation='relu', input_shape=(4,)))
model.add(Dense(3, activation='softmax')) # ---(*3a)
# モデルを構築 --- (*4)
model.compile(
loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# 学習を実行 --- (*5)
model.fit(x_train, y_train,
batch_size=20,
epochs=300)
# モデルを評価 --- (*6)
score = model.evaluate(x_test, y_test, verbose=1)
print('acc=', score[1], 'loss=', score[0])品種は[[2.2176956e-04 8.9532108e-04 9.9888295e-01]]です。