論理回路設計jte401/text/presentation.pdf論理回路設計 - 実習:VHDLによるデジタル回路設計 – 東京理科大学 基礎工学部電子応用工学科 (非常勤講師)
dn-3. ニューラルネットワーク の仕組み · tensorflow...
Transcript of dn-3. ニューラルネットワーク の仕組み · tensorflow...
dn-3. ニューラルネットワークの仕組み
(人工知能演習①(3))
1
金子邦彦
https://www.kkaneko.jp/cc/dn/index.html
アウトライン
2-1 復習2-2 ニューラルネットワークの作成
Python, TensorFlow, Kerasを用いて,ニューラルネットワークの作成,学習,ニューラルネットワークを用いた予測を行う.
2
2-1 復習
3
層が直列になっているニューラルネットワーク
4
全結合
全結合
全結合
入力 出力
層数が4の場合(総数はいろいろ変わる)
ユニットと全結合
5
入力 出力
※ 層の中には、ユニットが並ぶ
全結合
全結合
全結合
ニューラルネットワークによる予測
6
画素数784 のモノクロ画像があったとする
1層目2層目
・・・
活性化
データは配列(アレイ)
ニューラルネットワークによる予測
7
画素数784 のモノクロ画像があったとする
1層目2層目
・・・
活性化
データは配列(アレイ)
ニューラルネットワークによる予測
8
ニューラルネットワーク
未知のデータ
1つが活性化
↓活性化したユニットが「2番」なら,「予測結果は2」の意味
0
1
2
3
4
・ニューラルネットワークでの予測は,未知のデータを与えて,最終層のユニットを活性化させることで行う
ソフトマックス (softmax) に設定された出力層
9
出力層(出力を出す層)のユニットについて,活性化の度合いが高くなるのは同時に1つ
ソフトマックスに設定したとき・各ユニットの活性化の度合いは,0から1の数値
・最も値が高いものは「活性化している」,それ以外は「活性化してない」と考える
ニューラルネットワークとは
10
・ニューラルネットワークは,層が積み重なっている・層の中には,ユニットが並ぶ.・ユニットは,互いにつながり,ときには活性化する・ニューラルネットワークでの予測は,未知のデータを与えて,最終層のユニットを活性化させることで行う
ノートページ
2-2. ニューラルネットワークの作成
11
ニューラルネットワーク利用の流れ
1. 定義 (define)
ニューラルネットワークの作成
2. コンパイル (compile)
ニューラルネットワークの学習過程(損失関数や最適化手法など)を定めてからコンパイル
3. 学習 (train)
ニューラルネットワーク内のパラメータの自動調整(fit ともいう)
4. 評価 (evaluate)
学習の結果できたニューラルネットワークの評価
※前もって準備しておいた「テストデータ」を使用
5. 予測 (make prediction)
ニューラルネットワークを用いて予測12
ニューラルネットの使用例
13
出力は,各ユニットの活性化の度合い
層数: 2 構造は直列(Sequential)
ユニット数3ソフトマックス
ユニット数
64
4個の数値(入力層の全ユニットに同じ入力)
全結合 出力
ニューラルネットの動作イメージ
14
出力は,各ユニットの活性化の度合い
0.14816035
0.02995965
0.82188004
層数: 2 構造は直列(Sequential)
ユニット数3ソフトマックス
ユニット数
64
4個の数値 全結合
[0, 1, 0, 1]
Python
•数多くあるプログラミング言語の1つ
•さまざまな拡張機能(数百以上)がある
numpy 配列計算
tensorflow ディープラーニング(深層学習)向けの配列計算
Pybrain 機械学習全般
Scipy 最適化,積分,信号,画像,統計,フーリエ変換
AIMA
※ディープラーニング(深層学習)は,多層のニューラルネットワーク,その活用技術のこと
•アイデアをすぐに試したい(数十行以内のプログラム)場合にも向くとされる
ニューラルネットワークの例
16層数: 2
入力 出力全結合
ユニット数 3
この層は,「softmax」になるように設定
ユニット数
64
4 個の数値
import tensorflow as tf
import keras
from keras.models import Sequential
m = Sequential()
from keras.layers import Dense, Activation, Dropout
import keras.optimizers
m.add(Dense(units=64, activation='relu', input_dim=4))
m.add(Dense(units=3, activation='softmax'))
m.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9,
nesterov=True))
ニューラルネットワークを作るプログラム
17
入力は 4個の数値1層目のユニット数は 64
2層目のユニット数は 3「softmax」
損失関数は categorical_crossentropy,
最適化手法は SGD
ニューラルネットワークの作成
プログラムで,次を指定
•層の数
•各層のユニットの数
•各層のユニットの種類
•コンピュータ上の作成されるバーチャルなもの
18
ノートページ
実習の指示• 資料:17,18• 次のことを理解しマスターする
• ニューラルネットワークの作成• summary による確認表示
19※より詳しい実習資料は
https://www.kkaneko.jp/dblab/keras/keras.html
※実習のためのWindows の事前準備については
• Python: https://www.kkaneko.jp/tools/win/python.html• TenforFlow, Keras: https://www.kkaneko.jp/tools/win/keras.html
①ニューラルネットワークの作成
•次の Python プログラムを実行しなさい
20
import tensorflow as tf
import keras
from keras.models import Sequential
m = Sequential()
from keras.layers import Dense, Activation, Dropout
import keras.optimizers
m.add(Dense(units=64, activation='relu', input_dim=4))
m.add(Dense(units=3, activation='softmax'))
m.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9,
nesterov=True))
② summaryによる確認表示
•次の Python プログラムを実行しなさい
21
print(m.summary())
2-3. ニューラルネットワークの学習
22
ここで用いる学習データの例
23
[0, 1, 0, 1] [1, 0, 1, 0] 1 を出力
[1, 1, 0, 0] [0, 0, 1, 1] 2 を出力
その他 0, を出力させる
配列(アレイ)とは
•配列(アレイ)とは,データの並びで,0から始まる番号(添字)が付いている
24
180 20 250 40
0 1 2 3
1次元の配列
5 3
0,0 0,1
2次元の配列1,0 1,1
2 4
画像と画素
25
画素は,白と黒の2種類しかないとする
白は 0 黒は 1, とする
画像のサイズが 2 × 2のとき
[0, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 1, 0]
[1, 1, 1, 1]
学習用データセットの例
26
[[0, 0, 0, 0],
[0, 0, 0, 1],
[0, 0, 1, 0],
[0, 0, 1, 1],
[0, 1, 0, 0],
[0, 1, 0, 1],
[0, 1, 1, 0],
[0, 1, 1, 1],
[1, 0, 0, 0],
[1, 0, 0, 1],
[1, 0, 1, 0],
[1, 0, 1, 1],
[1, 1, 0, 0],
[1, 1, 0, 1],
[1, 1, 1, 0],
[1, 1, 1, 1]]
[0,
0,
0,
2,
0,
1,
0,
0,
0,
0,
1,
0,
2,
0,
0,
0]
どういう入力のとき,どういう出力が出て欲しいかのデータ
2-3. ニューラルネットワークの学習
•学習に使用されるデータセットは,
どういう入力のとき,どういう出力が
出て欲しいかのデータ
•形は配列(アレイ)
27
ノートページ
実習の指示• 資料:26~29• 次のことを理解しマスターする
• ニューラルネットワークの学習• summary による確認表示
28※より詳しい実習資料は
https://www.kkaneko.jp/dblab/keras/keras.html
※実習のためのWindows の事前準備については
• Python: https://www.kkaneko.jp/tools/win/python.html• TenforFlow, Keras: https://www.kkaneko.jp/tools/win/keras.html
①学習用データの準備
•次の Python プログラムを実行しなさい
29
import numpy as npx = np.array([[0, 0, 0, 0],[0, 0, 0, 1],[0, 0, 1, 0],[0, 0, 1, 1],[0, 1, 0, 0],[0, 1, 0, 1],[0, 1, 1, 0],[0, 1, 1, 1],[1, 0, 0, 0],[1, 0, 0, 1],[1, 0, 1, 0],[1, 0, 1, 1],[1, 1, 0, 0],[1, 1, 0, 1],[1, 1, 1, 0],[1, 1, 1, 1]])
次のページに続く
30
y = np.array([0, 0, 0, 2,0,1, 0,0, 0,0,1,0,2,0,0,0])
②ニューラルネットワークの学習
•次の Python プログラムを実行しなさい
31
m.fit(x, keras.utils.to_categorical(y), epochs=500)
③学習の終了の確認
32
2-4. ニューラルネットワークによる予測
33
ニューラルネットの使用例
34
出力は,各ユニットの活性化の度合い
ユニット数 3
0.14816035
0.02995965
0.82188004入力
[0, 1, 0, 1]4 個の数値
実習の指示• 資料:33~35• 次のことを理解しマスターする
• ニューラルネットワークによる予測
35※より詳しい実習資料は
https://www.kkaneko.jp/dblab/keras/keras.html
※実習のためのWindows の事前準備については
• Python: https://www.kkaneko.jp/tools/win/python.html• TenforFlow, Keras: https://www.kkaneko.jp/tools/win/keras.html
①ニューラルネットワークによる予測
•次の Python プログラムを実行しなさい
36
m.predict( np.array([[0, 1, 0, 1]]) )
学習では,乱数が使用されるので,各自,違った値が表示されることに注意.
37
入力
[0, 1, 0, 1]4 個の数値
出力 [0.14816035, 0.02995965, 0.82188004
3個の数値
0 である確率 0.14816035
1 である確率 0.02995965
2である確率 0.82188004
②第一層と第二層の間の重み(ユニット間の結合の強さ)の表示
•次の Python プログラムを実行しなさい
38
m.get_weights()[2]
学習では,乱数が使用されるので,各自,違った値が表示されることに注意.
ニューラルネットワークの例
39
64個のユニットと,3個のユニットとの結合は 192本
ユニット数 64
入力 出力
結合は192本
ユニット数 3
まとめ
•ユニット間の結合の強さを結合の重みなどという.
•学習では,結合の重みが変化する
40
ノートページ