Más contenido relacionado La actualidad más candente (20) Similar a Deep Learning基本理論とTensorFlow (20) Deep Learning基本理論とTensorFlow22. 22
実際のソースコード(抜粋)
# 画像分類-学習
def inference(images_placeholder, keep_prob):
# 畳込み層の作成
def conv2d(x, W):
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
# 畳込み層の作成
with tf.name_scope('conv1') as scope:
W_conv1 = weight_variable([5, 5, 3, 32])
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x_images, W_conv1) + b_conv1)
…
畳込み層???
weight???
strides???
関連知識がないともはや意味不明
29. 29
スコア計算(推論):inference – 畳込み層
• フィルタ(weight)を使って特徴的な領域を抜き出す
• training(最適化)ではフィルタ(weight)の値を調整する
# 畳み込み層の作成
def conv2d(x, W):
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
# 畳込み層の作成
with tf.name_scope('conv1') as scope:
W_conv1 = weight_variable([5, 5, 3, 32])
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x_images, W_conv1) + b_conv1)
30. 30
0.4
0.1 0.3
0.20.4
0.1 0.3
0.2
スコア計算(推論):inference – 畳込み層
32 4
31 5
01 3
0.1 0.3
0.2 0.4
2.5 2*0.1
+ 3*0.3
+1*0.2
+3*0.4
・・・ 4.12.5
3.81.2
計算イメージ
Input(画像等)
フィルタ Output
画像イメージ
http://cs231n.github.io/convolutional-networks/
様々な画像
フィルタ
(weight)で
特徴を抽出
これをいい感じに
修正するのが目的
31. 31
スコア計算(推論):inference – プーリング層
• 畳込み層の次に位置して、画像をサンプリングする
• 特徴の位置が変化しても対応できるようにするため
• 学習によって変化するパラメータは存在しない
# プーリング層の作成
def max_pool_2x2(x):
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1],
padding='SAME')
# プーリング層の作成
with tf.name_scope('pool1') as scope:
h_pool1 = max_pool_2x2(h_conv1)
32. 32
スコア計算(推論):inference – プーリング層
32 4
31 5
01 3
3 最大の
数値を
抽出
・・・ 53
31
計算イメージ
Input(画像等)
Output
画像イメージ
http://cs231n.github.io/convolutional-networks/
2x2ずつ抽出
4
5
3
1 0 3 3
33. 33
スコア計算(推論):inference – 全結合層
• 抽出した特徴量を元に、最終的な区分を出力する
• softmaxという計算をすることによって割合を出力
# 全結合層の作成
with tf.name_scope('fc2') as scope:
W_fc2 = weight_variable([1024, NUM_CLASSES])
b_fc2 = bias_variable([NUM_CLASSES])
# ソフトマックス関数による正規化
with tf.name_scope('softmax') as scope:
y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
37. 37
誤差計算:loss – 交差エントロピー
• 交差エントロピーという手法を実装
• 正解ラベルと算出した値を比較し誤差算出
def loss(logits, labels):
cross_entropy = -tf.reduce_sum(labels * tf.log(tf.clip_by_value(logits,1e-
10,1.0)))
return cross_entropy
計算イメージ
馬
ポニー
猫
・・・
☓
計算結果
0.65
0.12
0.01
正解ラベル
馬
ポニー
猫
0
1
0
馬
ポニー
猫
-0.18
-0.92
-2
計算結果(LOG)
☓ -1 = 0.92
44. 44
実行ログ
NNNN:crawl usr0102044$ python cnn.py
step 0, training accuracy 0.0981432
step 1, training accuracy 0.0848806
step 2, training accuracy 0.0928382
step 3, training accuracy 0.116711
step 4, training accuracy 0.108753
step 5, training accuracy 0.145889
・・・
step 199, training accuracy 0.3138302
step 200, training accuracy 0.30504
• 学習が進むたび正解率があがっていく
• しかし30%前後からaccuracyが上がらなくなる
61. 61
Google Cloud Machine Learning
TensorFlowを実行できるクラウドサービス
透過的に実行環境の増強が可能
ノードの追加は自由に変更
10GB 4500万行を9時間→30分強まで短縮