Musashitokiwa.LLC Blog

武蔵常盤株式会社のブログです。

AIに手を出してみる。TensorFlow機械学習クックブック

皆さん、こんにちは、こんばんわ。

His First Japan 合同会社 代表社員の字引淳です。

f:id:a-j1b1k1:20180805211928p:plain 

以前の投稿から48日。

hiscomputingdevblog.hatenadiary.jp

 

全く投稿がなかった理由は、単純に「仕事が忙しかった。」

優先度第3位の研究なので、どうしても時間があればということになってしまう。

 

以前の書籍で基礎編をやっていて、どうもあの本だけでは、これ以上前進できそうになかったので、もう一冊購入した。

 

TensorFlow機械学習クックブック Pythonベースの活用レシピ60+ (impress top gear)

TensorFlow機械学習クックブック Pythonベースの活用レシピ60+ (impress top gear)

 

 

何でもそうだが、基礎ってのは重要だ。

 

僕が計算が苦手なのは、四則計算のうち足し算と掛け算は得意だが、引き算と割り算が苦手というところに原因があった。単純に計算の練習をしていなかったからだ。

 

先日、友人のアマチュアサッカー選手に「足腰を鍛えるための、基礎練習を教えてください。」といったところ、「字引さん、普段から走ってる?走ってなければ教えても意味がない。」と言われて、断られてしまった。

 

唯一、プログラマーとしては、自宅での研究や、職場での経験で基礎ができているのである程度の小回りがきく。前回購入した本は、初級の上くらいの本とすると、今回は、初級の中から上くらいをカバーするものと考えて購入した。あまりに初級すぎるとWebで検索した方がお金がかからないので、このくらいの本がちょうどいい。

 

これからは、こちらの本のシリーズでブログを書いていこうと思う。

 

 

 

 

AIに手を出してみる。TensorFlowで学ぶディープラーニング入門

今回は、Chapter3-3に記載されています、「多層ニューラルネットワーク」について書きます。

皆さん、こんにちは、こんばんわ。

His First Japan 合同会社 代表社員の字引淳です。

f:id:a-j1b1k1:20170618215400p:plain

最近は、SNS広告やら、新規事業のサービスの資料作成やら、OpenStack環境構築の勉強やら、このAIの勉強について、優先度が下がっている。

優先順位は、現在の事業についてが第一位、新規事業についてが第二位、その他今後のために学ぶことは第三位になる。

SNS広告やら、新規事業のサービスの資料作成やら、OpenStack環境構築の勉強は新規事業に関することなので第二位になります。

このブログのAIについては、第三位になってしまうので、どうしても、集中的に時間と学習を突っ込むことができないのが残念です。

今回は多層のニューラルネットワークについてです。

Chapter03 - 1の場合は、直線で分類できるものでしたが、この場合は、直線での分類が困難な事例です。

イメージの結果の項目のように一松模様のような分類を行う場合は、単純な直線による分類が困難です。

f:id:a-j1b1k1:20170805213851j:plain

今回から、ニューラルネットワークの隠れ層と出力層に色をつけました。

隠れ層1:赤 特徴量を取り出す層

隠れ層2:青 隠れ層1の結果を受け、XOR回路による判定機能

出力層:紫 隠れ層2と合わせXOR回路による判定機能

 

これでChapter3が終わりになりますが、ここでやっていることは、①の枠内でのことに終始しています。

 

このように図を書いてまとめてみると、著者の意図が見えてきますね。

 

最後に、確認のために、前回のサンプルも色を付け直しました。

f:id:a-j1b1k1:20170805214204j:plain

隠れ層1:

出力層:

確かに、大きな変更が入っているのは、この部分だけということがわかります。※ ③の処理は、欲しい結果が違うので、差分として考えていません。悪しからず。

 

AIに手を出してみる。TensorFlowで学ぶディープラーニング入門 9

今回は、Chapter3-2-2に記載されています、「TensorBoard」について書きます。

皆さん、こんにちは、こんばんわ。

His First Japan 合同会社 代表社員の字引淳です。

f:id:a-j1b1k1:20170618215400p:plain

先回まで挨拶文を先に書いていたのですが、ブログの一覧表示(

2017-01-01から1年間の記事一覧 - His 1st Japan.LLC Blog

)をみて、一目で何が書かれているのかわからないということに気がつきまして、今回から、書き方を工夫しました。

今回で9回目です。

今回はまとめではなくて、TensorBoardについて記載します。(とは言っても、使い方について詳細には記載しません。)この本に書いてあるレベルでの扱いに終始します。

TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~

TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~

 

まず、これ。

Chapter3-2-2で作成したサンプルプログラムを図解したもの。

この図を見れば、プログラムの構成がわかる人は、このブログで学ぶことはないと思います。

f:id:a-j1b1k1:20170730214056p:plain

そして、各オブジェクトをオープンした図。

これは学習を可視化したものです。

ぱっと見なんのことだかわかりませんが、これは以下のプログラムを可視化したものです。

 

class SingleLayerNetwork:
def __init__(self, num_units):

with tf.Graph().as_default():
self.prepare_model(num_units)
self.prepare_session()

def prepare_model(self, num_units):
with tf.name_scope('input'):
x = tf.placeholder(tf.float32, [None, 784], name='input')

with tf.name_scope('hidden'):
w1 = tf.Variable(tf.truncated_normal([784, num_units]),
name='weights')
b1 = tf.Variable(tf.zeros([num_units]), name='biases')
hidden1 = tf.nn.relu(tf.matmul(x, w1) + b1, name='hidden1')

with tf.name_scope('output'):
w0 = tf.Variable(tf.zeros([num_units, 10]), name='weights')
b0 = tf.Variable(tf.zeros([10]), name='biases')
p = tf.nn.softmax(tf.matmul(hidden1, w0) + b0, name='softmax')

with tf.name_scope('optimizer'):
t = tf.placeholder(tf.float32, [None, 10], name='labels')
loss = -tf.reduce_sum(t * tf.log(p), name='loss')
train_step = tf.train.AdamOptimizer().minimize(loss)

with tf.name_scope('evaluator'):
correct_prediction = tf.equal(tf.argmax(p, 1), tf.argmax(t, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction,
tf.float32), name='accuracy')

tf.scalar_summary("loss", loss)
tf.scalar_summary("accuracy", accuracy)
tf.histogram_summary("weights_hidden", w1)
tf.histogram_summary("biases_hidden", b1)
tf.histogram_summary("weights_output", w0)
tf.histogram_summary("biases_output", b0)

self.x, self.t, self.p = x, t, p
self.train_step = train_step
self.loss = loss
self.accuracy = accuracy

def prepare_session(self):
sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())
summary = tf.merge_all_summaries()
writer = tf.train.SummaryWriter("/tmp/mnist_sl_logs", sess.graph)

self.sess = sess
self.summary = summary
self.writer = writer

 

 

レビューの時に役に立ちそうです。

設計者が、この図を使って設計して、プログラムが自動生成できるなんて機能は・・・残念ながらなさそう。

 

f:id:a-j1b1k1:20170730214532p:plain

で、次。

正解率と、誤差関数の値をグラフにしたもの。

f:id:a-j1b1k1:20170730215051p:plain

 

パラメータ(Valiable)の変化をグラフにしたもの。

f:id:a-j1b1k1:20170730214906p:plain

f:id:a-j1b1k1:20170730214838p:plain

なんか、物足りないと思ったが、結果のグラフに関しては、Jupyterにてグラフを作っている。

なんか、もっと使いこなせばものすごいことができそうな予感。

でも、この本に関して書いてあるレベルではこの程度しか記載してないのが残念。

なので、外部のページを調べて見た。

TensorFlow : How To : TensorBoard: 学習を視覚化する – TensorFlow

 

 

AIに手を出してみる。TensorFlowで学ぶディープラーニング入門 8

皆さん、こんにちは、こんばんわ。

His First Japan 合同会社 代表社員の字引淳です。

f:id:a-j1b1k1:20170618215400p:plain

前回は、「この本のChapter03-1はChapter02-1に書かれていることの拡張でした。」という、ことを書きました。

TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~

TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~

 

 今回は、「この本のChapter03-2に書かれていることはChapter03-1の拡張でした。」ということを書きます。

異なる点は、出力層の活性関数がソフトマックス関数を利用していることと、MINISTを利用していること。そして、結果のグラフです。

これをみると、今まで学んだものを使って、文字の解析を行なっていることがわかります。

ここで、MINISTが初めて出てきますが、これは、機械学習のデータセットで要は、手書き文字の標本データというものでしょうか?

ここからダウンロードできます。

MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges

 

今回の資料をまとめたものは、以下になります。

f:id:a-j1b1k1:20170723103037j:plain

今回は、特に難しいことはありませんが、前回の記事の内容と合わせて考えてみると、

  1. 隠れ層のノードの数、活性関数、学習率、最適化処理の回数などを調整し、パラメータの最適化を行う。
  2. その最適化されたパラメータを用いて、機械学習を行う。

その流れが記載されているということがわかりますね。

 

こちらでも当然、隠れ層のノードの数、活性関数、学習率、最適化処理の回数を調整して出てくる結果を見てみました。

 

簡単なところというと、あまり考えずに先へ進みがちですが、熟読すると、意外とそこに作者の意図が潜んでいることもありますね。

 

実際に書き換えるとどうなるかを見て見ます。

 

実際にやって見た結果は、以下に貼り付けておきます。

 

ここで伝えたいのは、やはり、隠れ層のノードの数、活性関数、学習率、最適化処理の回数を調整して、「最適な処理の時間内に最大の正解率を出せる組み合わせを見つけよう!」というものですね。

 

続きを読む

AIに手を出してみる。TensorFlowで学ぶディープラーニング入門 7

皆さん、こんにちは、こんばんわ。

His First Japan 合同会社 代表社員の字引淳です。

f:id:a-j1b1k1:20170618215400p:plain

前回は、「数式よりも、コードを勉強すればわかるよ。」という、ことを書きました。

TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~

TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~

 

 今回は、「この本のChapter03-1に書かれていることをまとめました。」ということを書きます。

 この本は、なかなか文字が多い初級書なので、一回読んだだけでは、何をしたらいいのかに迷うのが難点だ。

「はじめに、このサンプルでは、隠れ層の数と、学習率、最適化処理の回数を調整して、分類結果がどのように変わるのかを見てみましょう。」と記載があると、何をしたいのか一目瞭然になります。

しかし、このように書くと、熟読して理解するよりも手だけ動かす本になってしまうので、何回も繰り返して読んで、何をしたいのかを理解した上で隠れ層の数と、学習率、最適化処理の回数を変更してみたほうがとても勉強になる。

プログラムは、それをしてもらうだけのサンプル。

本当に、この作者は綺麗にまとめてわかりやすく構成している。※数式の意味は、今の所飛ばしているが・・・

いつものように、本章のまとめです。

 内容的には、Chapter02-1の拡張でした。

参照:

AIに手を出してみる。TensorFlowで学ぶディープラーニング入門 4 - His 1st Japan.LLC Blog

 

拡張内容としては、単層のニューラルネットワークになっています。

少しずつ各サンプルごとのつながりが見えてきますね。

この作者のまとめ方はとても秀逸。

本当に頭が下がります。

f:id:a-j1b1k1:20170718000652j:plain

 隠れ層の数と、学習率、最適化処理の回数を調整して、分類結果がどのように変わるのかをいくつか試してみました。

まとめ方が決まると、本を読んでいてもノイズが消えるので、作者の意図が見えてくる。

本当に面白いですね。

 

 

AIに手を出してみる。TensorFlowで学ぶディープラーニング入門 6

皆さん、こんにちは、こんばんわ。

His First Japan 合同会社 代表社員の字引淳です。

f:id:a-j1b1k1:20170618215400p:plain

 

前回に引き続き、以下の参考書をさらってみます。

 

今回は、「この本のChapter02-3に書かれていることをまとめました。」ということを書きます。

 f:id:a-j1b1k1:20170718002707j:plain

はじめのうちは、数式に惑わされたが、必要な数式はずべて、TensorFlowに用意されているので、無理して、数式を理解する必要がないことに気がつきました。

 

本当に必要なら、高校の数学からやり直せば済むこと。

 2017-07-18 00:23 画像更新

 

AIに手を出してみる。TensorFlowで学ぶディープラーニング入門 5

皆さん、こんにちは、こんばんわ。

His First Japan 合同会社 代表社員の字引淳です。

f:id:a-j1b1k1:20170618215400p:plain

前回は、「この本のChapter02-1に書かれていることをまとめました。」という、ことを書きました。

 

TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~

TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~

 

 

今回は、「この本のChapter02-2に書かれていることをまとめました。」ということを書きます。

 

 

機械学習モデルの3ステップ】

  1. 与えられたデータを元にして、道のデータを予測する数式を考える。
  2. 数式に含まれるパラメーターの良し悪しを判断する誤差関数を用意する。
  3. 誤差関数を最小にするようにパラメータの値を決定する。

 

f:id:a-j1b1k1:20170718002606j:plain

 

この図を並べていくと、この本で言いたいことが一目瞭然となりそうです。

この画像を更新したら、予告なく、差し替えます。

 

 2017-07-18 00:23 画像更新