NeuralNetwork
をテンプレートにして作成
LECTURE
担当科目一覧
コンピュータ概論/2024
データサイエンス/2024
3DCG演習/2024
情報デザイン研究/2024
卒業研究/2024
KEYWORDS
WEB DESIGN
SOCIAL DESIGN
SQUARES
LINKS
九州産業大学
芸術学部
芸術研究科
九産大美術館
九産大図書館
年間スケジュール
動画ニュース他
交通情報
気象・環境情報
危機に備えて
K'sLife
Office365Mail
Tools
SEARCH
開始行:
*ニューラルネットワーク
NeuralNetwork
~
ニューラルネットワーク(Neural Network:NN)とは、人間の...
-[[GoogleImage:ニューラルネットワーク]]
-[[GoogleImage:ニューロン シナプス モデル]]
-http://ncase.me/neurons/ &small(ニューロンの働きを体...
~
~
***CONTENTS
#contents2_1
~
**人工ニューロン
#image(ArtificialNeuron.png,right,40%)
人間の脳にはニューロンという神経細胞が、大脳だけで160億、...
この仕組みを模したのが「人工ニューロン(artificial neur...
'''''y = f ( wSUB{1};・xSUB{1}; + wSUB{2};・xSUB{2}; ...
'''W = ( wSUB{1};, wSUB{2};, ・・wSUB{n}; )'''は、多次元...
一般に、出力 y は0または1。つまり、細胞は抑制されるか...
~
~
**識別の原理
***2次元の散布図を直線で分離
'''''W''''' の調整はどう行うのか、視覚的に説明してみまし...
#image(identification.png)
以下の式は、原点を通る直線で、その法線ベクトルは(w0, w1...
'''''w0・x0 + w1・x1 = 0'''''
図の状態を仮定して識別問題を考えた場合、w0, w1 が適切な値...
(x0,x1)と法線ベクトルの内積 = '''w0・x0 + w1・x1''' ...
-内積が+で、正解ラベルが +1 > TYPE A を正しく判定している
-内積が+で、正解ラベルが -1 > TYPE B を TYPE A と誤判...
-内積が - で、正解ラベルが +1 > TYPE A を TYPE B と誤...
-内積が - で、正解ラベルが -1 > TYPE B を正しく判定して...
つまり、ひとつのサンプルについての判定とその後の作業は以...
-内積 IP × 正解ラベル > 0 ならばOK > W の修正は行わない
-内積 IP × 正解ラベル <= 0 ならば誤認と判断 > W の修正...
修正は、以下のように行います。正解ラベル を学習率( Learni...
'''''W = W + X * 正解ラベル * 0.1'''''
正解ラベルが 1, -1 に設定されていることで、2種類のエラー...
~
学習率とは「どの程度強く修正をかけるか」を意味する値で、...
-学習率が大きいと、1回の学習での回転角が大きくなりすぎて...
-学習率が小さいと、正解に近づくには時間を要しますが、すこ...
以上、学習率を正しく見極めた上で、この手順で、データを読...
~
***付記:平面の概念について
一般に高校の数学では、平面の式を &mathjax( z = ax + by );...
- y = w・x ・・1次元の平面 = 直線
- y = w1・x1 + w2・x2 ・・2次元の平面([[Google:z=0.3x+...
:
- y = w1・x1 + w2・x2・・+ wn・xn ・・N次元の平面
~
~
**ニューラルネットワーク
#image(NeuralNetwork.png,right,40%)
右図はニューラルネットワークのイメージです。Input Layer(...
~
***活性化関数
ニューラルネットワークにおいて線形変換(重み付き入力の総...
-中間層で用いる活性化関数
--''ステップ関数(形式ニューロン)''
結果が閾値θよりも大きいか否かで、出力が単純に0または1の...
''' f( x ) = 0(x≦θ), 1(x>θ)'''
--''線形結合(単純パーセプトロン)''
結果の値にバイアスを加えただけです。出力は線形連続になり...
''' f( x ) = ax + b'''
--''シグモイド関数''
入力した値が大きければ大きいほど1に近づき、小さければ小さ...
'''f( x ) = 1 / ( 1 + exp(-x) )'''
--''tanh関数''
出力が−1から1なので出力がゼロになることでシグモイド関数...
'''f( x ) = ( exp(x) - exp(-x) ) / ( exp(x) + exp(-x) )'''
--''ReLU(ランプ関数)''(使用頻度大)
入力が 0以下のときは 0、1より大きいときは入力をそのまま出...
''' f( x ) = 0(x<θ), x(x≧θ)''' あるいは '''f( x ) ...
-出力層で用いる活性化関数
--''ソフトマックス関数''(使用頻度大)
各出力 f( xSUB{i}; ) の値をすべての '''i''' について合計...
''' f( xSUB{i}; ) = exp(xSUB{i};) / ΣSUB{j}; exp(xSUB{j};...
参考:__[[出力結果表示の例>https://koichi-inoue.github.io...
--''恒等関数''
最もシンプル、入力値をそのまま出力するものです。
'''f( x ) = x '''
~
***最適化アルゴリズム(オプティマイザ)
ニューラルネットの文脈では、最適化とは「出力の誤差が最小...
-[[SGD>Google:最適化 SGD]]:Stochastic Gradient Descent ...
-[[Momentum>Google:最適化 SGD]]
-[[Nesterov Accelerated Gradient>Google:最適化 Nesterov A...
-[[Adaptive Learning Rate>Google:最適化 Adaptive Learning...
Momentum法と異なり、学習率を自動調整することを目指したの...
Adagrad, RMSProp, Adadelta, Adam, Adamax, Eve,
-[[YellowFin>Google:最適化 YellowFin]]
~
~
&aname(DL);
~
**ディープラーニング
ニューラルネットワークの基本的なアイデアは3層構造ですが...
-[[GoogleImage:ディープラーニング]]
-[[体験サイト:Playground>http://playground.tensorflow.or...
~
***インターネットの存在が技術発展に貢献
ディープラーニング を成立させるには、入力と出力のデータセ...
~
***ディープラーニング の構造
以下の5つの構造があります。
-''FFNN''(Feedforward Neural Network|順伝播型ニューラル...
入力層>多段階の中間層>出力層と単一方向へ信号が伝播する...
-''CNN''(Convolutional Neural Network|畳み込みニューラ...
畳み込みニューラルネットワークは、人間の視覚情報処理の動...
-''RNN''(Recurrent Neural Network|再帰型ニューラルネッ...
再帰型ニューラルネットワークは、人間の聴覚情報処理、すな...
-''LSTM''(Long Short-Term Memory|長・短期記憶ユニット)
RNNには、短時間のデータしか処理できないという問題がありま...
-''GAN''(Generative Adversarial Network|敵対的生成ネッ...
GANは生成器(Generator)と識別器(Discriminator)の2つの...
~
***ディープラーニングの活用事例
-AI端末 Googe Home(Googleアシスタント)
-AIコンシェルジュ [[OK,Google>Google:OK,Google]] [[Siri...
-翻訳 [[Google翻訳>https://translate.google.com/?hl=ja]]
&small(従来は PBMT(フレーズベース翻訳)、2016以降 GNMT(...
~
***機械学習API([[Google Cloud platform>https://www.googl...
-Cloud Vision API
-Speech API
-Natural Language API
-Translate API
~
~
**サンプルプログラム1|Iris の分類学習
[[Iris>https://archive.ics.uci.edu/ml/datasets/iris]] は...
~
***サンプル|JupyterNotebook
ipynb(JupyterNotebook)形式で、GitHubに置いています。
-GitHub:[[NeuralNetwork_Iris.ipynb>https://github.com/ko...
~
***使用しているライブラリ
-[[scikit-learn]]
~
***使用しているデータ:IRIS
以下の項目をもつ150の計測データ
-Sepal Length(がく片長 cm)
-Sepal Width(がく片幅 cm)
-Petal Length(花びら長 cm)
-Petal Width(花びら幅 cm)
-Species:setosa, versicolor, virginica
~
***参考になるサイト
-ネコでも分かる「簡単な分類AI」の作り方(図がとてもわかり...
https://zenn.dev/nekoallergy/articles/sklearn-nn-iris
~
~
**サンプルプログラム2|手書き文字認識
手書き数字の画像データ(28 × 28px) と正解ラベルのヘ...
~
***サンプル|JupyterNotebook
以下に、サンプルを掲載しています。
-GitHub:[[NeuralNetwork_MNIST.ipynb>https://github.com/k...
-nbviewer:[[NeuralNetwork_MNIST.ipynb>https://nbviewer.j...
~
***使用しているライブラリ
-[[scikit-learn]]
~
#image(DataScience/MNIST.jpg,right,30%)
***使用しているデータ:MNIST(エムニスト)
手書き文字認識用のサンプルデータ
-28px x 28px の画像 70,000枚
#clear
~
**サンプルプログラム3|画像の分類
MobileNetの学習済みモデルと [[TensorFlow.js]]を利用して、...
-CODE:https://github.com/koichi-inoue/TensorFlowJS_Mobil...
-DEMO:https://koichi-inoue.github.io/TensorFlowJS_Mobile...
~
-WebGL経由でGPUを利用するので、古い環境では動かない場合が...
-認識できる物体のラベル一覧は以下の検索でヒットします。
[[Google:imagenet 1000 classes list]]
-詳細 > [[TensorFlow.js]]
~
~
//**サンプルプログラム4|その他
//[[ml5.js]] というJavaScriptAPI を利用した画像の分類その...
//> [[ml5.js]]
//~
//~
//~
**APPENDIX
***関連ページ
-[[DataScience]]
-[[Data]]
-[[Statistics]]
-[[MachineLearning]]
//-[[NeuralNetwork]]
-[[DataMining]]
-[[ArtificialIntelligence]]
-[[ArtificialIntelligence/Links]]
~
~
**APPENDIX 2
サンプルプログラム1で紹介した「Iris の分類」を TensorFlo...
~
***サンプル|JupyterNotebook
ipynb(JupyterNotebook)形式で、GitHubに置いています。
-GitHub:[[NeuralNetwork_Iris_TensorFlow.ipynb>https://gi...
~
***使用しているライブラリ
-TensorFlow
-Keras
~
***使用しているデータ:IRIS
以下の項目をもつ150の計測データ
-Sepal Length(がく片長 cm)
-Sepal Width(がく片幅 cm)
-Petal Length(花びら長 cm)
-Petal Width(花びら幅 cm)
-Species:setosa, versicolor, virginica
~
***モデルの定義(Kerasを使用)
入力層4、中間層32、出力層3 で構築しています。
model = Sequntial()
model.add(Dense(32, input_dim=4))
model.add(Activation('relu'))
model.add(Dense(4))
model.add(Activation('softmax'))
~
~
**APPENDIX 3
サンプルプログラム2で紹介した「手書き文字認識」を Tensor...
~
***サンプル|JupyterNotebook
以下に、サンプルを掲載しています。
-GitHub:[[NeuralNetwork_MNIST_TensorFlow.ipynb>https://g...
~
***使用しているライブラリ
-TensorFlow
-Keras
~
#image(DataScience/MNIST.jpg,right,30%)
***使用しているデータ:MNIST(エムニスト)
手書き文字認識用のサンプルデータ
-28px x 28px の画像 70,000枚
-訓練用 60,000枚
-テスト用 10,000枚
~
***モデルの定義
入力層 784、中間層 64、出力層 10(1-hot ベクトル)
オプティマイザーを2種類試しています。
-[[SGD>Google:最適化 SGD]]:Stochastic Gradient Descent
-[[Adam>Google:最適化 Adam]]:Adaptive Moment estimation
~
***Python ソースコード
mnist.py などの [[Python]] ファイルとしてお試し下さい。
#1. Load Data
from tensorflow.python.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#2. Reshape X
x_train = x_train.reshape(60000, 784)
x_test = x_test.reshape(10000, 784)
x_train = x_train/255.
x_test = x_test/255.
#3. Reshape Y
from tensorflow.python.keras.utils import to_categorical
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
#4. Model Setting
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense
model = Sequential()
model.add( Dense( units=64, input_shape=(784,), activati...
model.add( Dense( units=10, activation='softmax') )
#5. Model Compile
model.compile(optimizer='sgd',
loss='categorical_crossentropy',
metrics=['accuracy'])
#6. Train
model.fit(x_train, y_train,
epochs=10, batch_size=32, verbose=2, vali...
#7. Result : Accuracy
score = model.evaluate(x_test, y_test, batch_size = 1)
print("accuracy =", score[1])
#8. Check 100 Test Data : Confusion Matrix
import numpy as np
from sklearn.metrics import confusion_matrix
predict_classes = model.predict_classes(x_test[1:100,])
true_classes = np.argmax(y_test[1:100], 1)
print(confusion_matrix(true_classes, predict_classes))
~
***出力結果
Epoch 1/10
- 2s - loss: 0.7345 - acc: 0.8129 - val_loss: 0.3914 - ...
Epoch 2/10
- 1s - loss: 0.3720 - acc: 0.8965 - val_loss: 0.3191 - ...
Epoch 3/10
- 1s - loss: 0.3199 - acc: 0.9099 - val_loss: 0.2861 - ...
Epoch 4/10
- 1s - loss: 0.2905 - acc: 0.9183 - val_loss: 0.2666 - ...
Epoch 5/10
- 1s - loss: 0.2693 - acc: 0.9239 - val_loss: 0.2497 - ...
Epoch 6/10
- 1s - loss: 0.2515 - acc: 0.9295 - val_loss: 0.2384 - ...
Epoch 7/10
- 1s - loss: 0.2364 - acc: 0.9335 - val_loss: 0.2252 - ...
Epoch 8/10
- 1s - loss: 0.2231 - acc: 0.9370 - val_loss: 0.2159 - ...
Epoch 9/10
- 1s - loss: 0.2119 - acc: 0.9401 - val_loss: 0.2071 - ...
Epoch 10/10
- 1s - loss: 0.2018 - acc: 0.9427 - val_loss: 0.1999 - v...
10000/10000 [==============================] - 2s 176us/...
accuracy = 0.9434
[[ 8 0 0 0 0 0 0 0 0 0 ]
[ 0 14 0 0 0 0 0 0 0 0 ]
[ 0 0 7 0 0 0 0 1 0 0 ]
[ 0 0 0 11 0 0 0 0 0 0 ]
[ 0 0 0 0 13 0 1 0 0 0 ]
[ 0 0 0 0 0 6 1 0 0 0 ]
[ 0 0 0 0 0 0 10 0 0 0 ]
[ 0 0 0 0 0 0 0 14 0 0 ]
[ 0 0 0 0 0 0 0 0 2 0 ]
[ 0 0 0 0 0 0 0 0 0 11 ]]
~
***解説
-1) データのインポート ライブラリからデータを読み込みます。
--x は入力画像、 y は正解ラベル。
--train が学習用、test が評価用です。
- 2) 入力画像データのスケール変換
--2次元画像 (28 × 28px) を1次元 (784px) に変形しています。
--輝度(0〜255)を 最小値 0、最大値1にな るよう正規化してい...
-3) 正解ラベルの対応づけ
0 〜9の正解ラベルをカテゴリーデータに変形しています。
-4) 学習モデルの構築
--モデルには中間層の追加が簡単な Sequential モデルを選択
--入力層は、データ仕様から 784。
--中間層は 64 と設定しています。
ニューロンの出力を判定する活性化関数には relu( ランプ関数...
--出力層は、正解数の 10。
判定には Softmax 関数 を設定しています。
-5) モデルに訓練過程を設定
--model.compile で訓練過程を設定します。
--最適化の手法として、確率的勾配降下法 (SGD)を選択してい...
--損失関数に多値分類 (categorical_crossentropy) を選択し...
-6) 機械学習の実行(数十秒かかります)
--model.fit で学習開始。
--epochs は学習反復回数 で、ここでは 10 回反復。
--loss は正解とのズレで、 0 に近いほど正解に近い。
--accuracy は正確性で、100% に近いほど正解に近い。
-7) 評価用のデータで正解率を検証
--評価用データに対する正解率を model.evaluate で計算。
--結果、94.3% 正解するモデルができています。
-8) 混同行列でミスの発生状況を確認
--100 件のテストデータで、実際にどこにミスが生じているか...
--出力された表は、混同行列
---行が予測された数字で、列が実際の正解に対応します。
---対角線上にあるのが正しく分類されたものです。
---対角線外のセルは、誤って予測されたものです。
--表からは、2 と 7、4 と 6、 5 と6を誤認するエラーが確認...
~
~
終了行:
*ニューラルネットワーク
NeuralNetwork
~
ニューラルネットワーク(Neural Network:NN)とは、人間の...
-[[GoogleImage:ニューラルネットワーク]]
-[[GoogleImage:ニューロン シナプス モデル]]
-http://ncase.me/neurons/ &small(ニューロンの働きを体...
~
~
***CONTENTS
#contents2_1
~
**人工ニューロン
#image(ArtificialNeuron.png,right,40%)
人間の脳にはニューロンという神経細胞が、大脳だけで160億、...
この仕組みを模したのが「人工ニューロン(artificial neur...
'''''y = f ( wSUB{1};・xSUB{1}; + wSUB{2};・xSUB{2}; ...
'''W = ( wSUB{1};, wSUB{2};, ・・wSUB{n}; )'''は、多次元...
一般に、出力 y は0または1。つまり、細胞は抑制されるか...
~
~
**識別の原理
***2次元の散布図を直線で分離
'''''W''''' の調整はどう行うのか、視覚的に説明してみまし...
#image(identification.png)
以下の式は、原点を通る直線で、その法線ベクトルは(w0, w1...
'''''w0・x0 + w1・x1 = 0'''''
図の状態を仮定して識別問題を考えた場合、w0, w1 が適切な値...
(x0,x1)と法線ベクトルの内積 = '''w0・x0 + w1・x1''' ...
-内積が+で、正解ラベルが +1 > TYPE A を正しく判定している
-内積が+で、正解ラベルが -1 > TYPE B を TYPE A と誤判...
-内積が - で、正解ラベルが +1 > TYPE A を TYPE B と誤...
-内積が - で、正解ラベルが -1 > TYPE B を正しく判定して...
つまり、ひとつのサンプルについての判定とその後の作業は以...
-内積 IP × 正解ラベル > 0 ならばOK > W の修正は行わない
-内積 IP × 正解ラベル <= 0 ならば誤認と判断 > W の修正...
修正は、以下のように行います。正解ラベル を学習率( Learni...
'''''W = W + X * 正解ラベル * 0.1'''''
正解ラベルが 1, -1 に設定されていることで、2種類のエラー...
~
学習率とは「どの程度強く修正をかけるか」を意味する値で、...
-学習率が大きいと、1回の学習での回転角が大きくなりすぎて...
-学習率が小さいと、正解に近づくには時間を要しますが、すこ...
以上、学習率を正しく見極めた上で、この手順で、データを読...
~
***付記:平面の概念について
一般に高校の数学では、平面の式を &mathjax( z = ax + by );...
- y = w・x ・・1次元の平面 = 直線
- y = w1・x1 + w2・x2 ・・2次元の平面([[Google:z=0.3x+...
:
- y = w1・x1 + w2・x2・・+ wn・xn ・・N次元の平面
~
~
**ニューラルネットワーク
#image(NeuralNetwork.png,right,40%)
右図はニューラルネットワークのイメージです。Input Layer(...
~
***活性化関数
ニューラルネットワークにおいて線形変換(重み付き入力の総...
-中間層で用いる活性化関数
--''ステップ関数(形式ニューロン)''
結果が閾値θよりも大きいか否かで、出力が単純に0または1の...
''' f( x ) = 0(x≦θ), 1(x>θ)'''
--''線形結合(単純パーセプトロン)''
結果の値にバイアスを加えただけです。出力は線形連続になり...
''' f( x ) = ax + b'''
--''シグモイド関数''
入力した値が大きければ大きいほど1に近づき、小さければ小さ...
'''f( x ) = 1 / ( 1 + exp(-x) )'''
--''tanh関数''
出力が−1から1なので出力がゼロになることでシグモイド関数...
'''f( x ) = ( exp(x) - exp(-x) ) / ( exp(x) + exp(-x) )'''
--''ReLU(ランプ関数)''(使用頻度大)
入力が 0以下のときは 0、1より大きいときは入力をそのまま出...
''' f( x ) = 0(x<θ), x(x≧θ)''' あるいは '''f( x ) ...
-出力層で用いる活性化関数
--''ソフトマックス関数''(使用頻度大)
各出力 f( xSUB{i}; ) の値をすべての '''i''' について合計...
''' f( xSUB{i}; ) = exp(xSUB{i};) / ΣSUB{j}; exp(xSUB{j};...
参考:__[[出力結果表示の例>https://koichi-inoue.github.io...
--''恒等関数''
最もシンプル、入力値をそのまま出力するものです。
'''f( x ) = x '''
~
***最適化アルゴリズム(オプティマイザ)
ニューラルネットの文脈では、最適化とは「出力の誤差が最小...
-[[SGD>Google:最適化 SGD]]:Stochastic Gradient Descent ...
-[[Momentum>Google:最適化 SGD]]
-[[Nesterov Accelerated Gradient>Google:最適化 Nesterov A...
-[[Adaptive Learning Rate>Google:最適化 Adaptive Learning...
Momentum法と異なり、学習率を自動調整することを目指したの...
Adagrad, RMSProp, Adadelta, Adam, Adamax, Eve,
-[[YellowFin>Google:最適化 YellowFin]]
~
~
&aname(DL);
~
**ディープラーニング
ニューラルネットワークの基本的なアイデアは3層構造ですが...
-[[GoogleImage:ディープラーニング]]
-[[体験サイト:Playground>http://playground.tensorflow.or...
~
***インターネットの存在が技術発展に貢献
ディープラーニング を成立させるには、入力と出力のデータセ...
~
***ディープラーニング の構造
以下の5つの構造があります。
-''FFNN''(Feedforward Neural Network|順伝播型ニューラル...
入力層>多段階の中間層>出力層と単一方向へ信号が伝播する...
-''CNN''(Convolutional Neural Network|畳み込みニューラ...
畳み込みニューラルネットワークは、人間の視覚情報処理の動...
-''RNN''(Recurrent Neural Network|再帰型ニューラルネッ...
再帰型ニューラルネットワークは、人間の聴覚情報処理、すな...
-''LSTM''(Long Short-Term Memory|長・短期記憶ユニット)
RNNには、短時間のデータしか処理できないという問題がありま...
-''GAN''(Generative Adversarial Network|敵対的生成ネッ...
GANは生成器(Generator)と識別器(Discriminator)の2つの...
~
***ディープラーニングの活用事例
-AI端末 Googe Home(Googleアシスタント)
-AIコンシェルジュ [[OK,Google>Google:OK,Google]] [[Siri...
-翻訳 [[Google翻訳>https://translate.google.com/?hl=ja]]
&small(従来は PBMT(フレーズベース翻訳)、2016以降 GNMT(...
~
***機械学習API([[Google Cloud platform>https://www.googl...
-Cloud Vision API
-Speech API
-Natural Language API
-Translate API
~
~
**サンプルプログラム1|Iris の分類学習
[[Iris>https://archive.ics.uci.edu/ml/datasets/iris]] は...
~
***サンプル|JupyterNotebook
ipynb(JupyterNotebook)形式で、GitHubに置いています。
-GitHub:[[NeuralNetwork_Iris.ipynb>https://github.com/ko...
~
***使用しているライブラリ
-[[scikit-learn]]
~
***使用しているデータ:IRIS
以下の項目をもつ150の計測データ
-Sepal Length(がく片長 cm)
-Sepal Width(がく片幅 cm)
-Petal Length(花びら長 cm)
-Petal Width(花びら幅 cm)
-Species:setosa, versicolor, virginica
~
***参考になるサイト
-ネコでも分かる「簡単な分類AI」の作り方(図がとてもわかり...
https://zenn.dev/nekoallergy/articles/sklearn-nn-iris
~
~
**サンプルプログラム2|手書き文字認識
手書き数字の画像データ(28 × 28px) と正解ラベルのヘ...
~
***サンプル|JupyterNotebook
以下に、サンプルを掲載しています。
-GitHub:[[NeuralNetwork_MNIST.ipynb>https://github.com/k...
-nbviewer:[[NeuralNetwork_MNIST.ipynb>https://nbviewer.j...
~
***使用しているライブラリ
-[[scikit-learn]]
~
#image(DataScience/MNIST.jpg,right,30%)
***使用しているデータ:MNIST(エムニスト)
手書き文字認識用のサンプルデータ
-28px x 28px の画像 70,000枚
#clear
~
**サンプルプログラム3|画像の分類
MobileNetの学習済みモデルと [[TensorFlow.js]]を利用して、...
-CODE:https://github.com/koichi-inoue/TensorFlowJS_Mobil...
-DEMO:https://koichi-inoue.github.io/TensorFlowJS_Mobile...
~
-WebGL経由でGPUを利用するので、古い環境では動かない場合が...
-認識できる物体のラベル一覧は以下の検索でヒットします。
[[Google:imagenet 1000 classes list]]
-詳細 > [[TensorFlow.js]]
~
~
//**サンプルプログラム4|その他
//[[ml5.js]] というJavaScriptAPI を利用した画像の分類その...
//> [[ml5.js]]
//~
//~
//~
**APPENDIX
***関連ページ
-[[DataScience]]
-[[Data]]
-[[Statistics]]
-[[MachineLearning]]
//-[[NeuralNetwork]]
-[[DataMining]]
-[[ArtificialIntelligence]]
-[[ArtificialIntelligence/Links]]
~
~
**APPENDIX 2
サンプルプログラム1で紹介した「Iris の分類」を TensorFlo...
~
***サンプル|JupyterNotebook
ipynb(JupyterNotebook)形式で、GitHubに置いています。
-GitHub:[[NeuralNetwork_Iris_TensorFlow.ipynb>https://gi...
~
***使用しているライブラリ
-TensorFlow
-Keras
~
***使用しているデータ:IRIS
以下の項目をもつ150の計測データ
-Sepal Length(がく片長 cm)
-Sepal Width(がく片幅 cm)
-Petal Length(花びら長 cm)
-Petal Width(花びら幅 cm)
-Species:setosa, versicolor, virginica
~
***モデルの定義(Kerasを使用)
入力層4、中間層32、出力層3 で構築しています。
model = Sequntial()
model.add(Dense(32, input_dim=4))
model.add(Activation('relu'))
model.add(Dense(4))
model.add(Activation('softmax'))
~
~
**APPENDIX 3
サンプルプログラム2で紹介した「手書き文字認識」を Tensor...
~
***サンプル|JupyterNotebook
以下に、サンプルを掲載しています。
-GitHub:[[NeuralNetwork_MNIST_TensorFlow.ipynb>https://g...
~
***使用しているライブラリ
-TensorFlow
-Keras
~
#image(DataScience/MNIST.jpg,right,30%)
***使用しているデータ:MNIST(エムニスト)
手書き文字認識用のサンプルデータ
-28px x 28px の画像 70,000枚
-訓練用 60,000枚
-テスト用 10,000枚
~
***モデルの定義
入力層 784、中間層 64、出力層 10(1-hot ベクトル)
オプティマイザーを2種類試しています。
-[[SGD>Google:最適化 SGD]]:Stochastic Gradient Descent
-[[Adam>Google:最適化 Adam]]:Adaptive Moment estimation
~
***Python ソースコード
mnist.py などの [[Python]] ファイルとしてお試し下さい。
#1. Load Data
from tensorflow.python.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#2. Reshape X
x_train = x_train.reshape(60000, 784)
x_test = x_test.reshape(10000, 784)
x_train = x_train/255.
x_test = x_test/255.
#3. Reshape Y
from tensorflow.python.keras.utils import to_categorical
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
#4. Model Setting
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense
model = Sequential()
model.add( Dense( units=64, input_shape=(784,), activati...
model.add( Dense( units=10, activation='softmax') )
#5. Model Compile
model.compile(optimizer='sgd',
loss='categorical_crossentropy',
metrics=['accuracy'])
#6. Train
model.fit(x_train, y_train,
epochs=10, batch_size=32, verbose=2, vali...
#7. Result : Accuracy
score = model.evaluate(x_test, y_test, batch_size = 1)
print("accuracy =", score[1])
#8. Check 100 Test Data : Confusion Matrix
import numpy as np
from sklearn.metrics import confusion_matrix
predict_classes = model.predict_classes(x_test[1:100,])
true_classes = np.argmax(y_test[1:100], 1)
print(confusion_matrix(true_classes, predict_classes))
~
***出力結果
Epoch 1/10
- 2s - loss: 0.7345 - acc: 0.8129 - val_loss: 0.3914 - ...
Epoch 2/10
- 1s - loss: 0.3720 - acc: 0.8965 - val_loss: 0.3191 - ...
Epoch 3/10
- 1s - loss: 0.3199 - acc: 0.9099 - val_loss: 0.2861 - ...
Epoch 4/10
- 1s - loss: 0.2905 - acc: 0.9183 - val_loss: 0.2666 - ...
Epoch 5/10
- 1s - loss: 0.2693 - acc: 0.9239 - val_loss: 0.2497 - ...
Epoch 6/10
- 1s - loss: 0.2515 - acc: 0.9295 - val_loss: 0.2384 - ...
Epoch 7/10
- 1s - loss: 0.2364 - acc: 0.9335 - val_loss: 0.2252 - ...
Epoch 8/10
- 1s - loss: 0.2231 - acc: 0.9370 - val_loss: 0.2159 - ...
Epoch 9/10
- 1s - loss: 0.2119 - acc: 0.9401 - val_loss: 0.2071 - ...
Epoch 10/10
- 1s - loss: 0.2018 - acc: 0.9427 - val_loss: 0.1999 - v...
10000/10000 [==============================] - 2s 176us/...
accuracy = 0.9434
[[ 8 0 0 0 0 0 0 0 0 0 ]
[ 0 14 0 0 0 0 0 0 0 0 ]
[ 0 0 7 0 0 0 0 1 0 0 ]
[ 0 0 0 11 0 0 0 0 0 0 ]
[ 0 0 0 0 13 0 1 0 0 0 ]
[ 0 0 0 0 0 6 1 0 0 0 ]
[ 0 0 0 0 0 0 10 0 0 0 ]
[ 0 0 0 0 0 0 0 14 0 0 ]
[ 0 0 0 0 0 0 0 0 2 0 ]
[ 0 0 0 0 0 0 0 0 0 11 ]]
~
***解説
-1) データのインポート ライブラリからデータを読み込みます。
--x は入力画像、 y は正解ラベル。
--train が学習用、test が評価用です。
- 2) 入力画像データのスケール変換
--2次元画像 (28 × 28px) を1次元 (784px) に変形しています。
--輝度(0〜255)を 最小値 0、最大値1にな るよう正規化してい...
-3) 正解ラベルの対応づけ
0 〜9の正解ラベルをカテゴリーデータに変形しています。
-4) 学習モデルの構築
--モデルには中間層の追加が簡単な Sequential モデルを選択
--入力層は、データ仕様から 784。
--中間層は 64 と設定しています。
ニューロンの出力を判定する活性化関数には relu( ランプ関数...
--出力層は、正解数の 10。
判定には Softmax 関数 を設定しています。
-5) モデルに訓練過程を設定
--model.compile で訓練過程を設定します。
--最適化の手法として、確率的勾配降下法 (SGD)を選択してい...
--損失関数に多値分類 (categorical_crossentropy) を選択し...
-6) 機械学習の実行(数十秒かかります)
--model.fit で学習開始。
--epochs は学習反復回数 で、ここでは 10 回反復。
--loss は正解とのズレで、 0 に近いほど正解に近い。
--accuracy は正確性で、100% に近いほど正解に近い。
-7) 評価用のデータで正解率を検証
--評価用データに対する正解率を model.evaluate で計算。
--結果、94.3% 正解するモデルができています。
-8) 混同行列でミスの発生状況を確認
--100 件のテストデータで、実際にどこにミスが生じているか...
--出力された表は、混同行列
---行が予測された数字で、列が実際の正解に対応します。
---対角線上にあるのが正しく分類されたものです。
---対角線外のセルは、誤って予測されたものです。
--表からは、2 と 7、4 と 6、 5 と6を誤認するエラーが確認...
~
~
ページ名: