ぽきたに 〜ありきたりな非凡〜

現役F欄大学生が送るゴミ溜めと独り言

初心者による初心者の為のTensorFlowを使用したMNIST for ML Beginnersを解説。

どうも、たっきーです。
機械学習Hello worldと呼ばれるているMNISTってやつを試してみたので覚書き。
 

はじめに

今回は本当に触ってみただけなので、中のロジックとか数式の意味とか割りと理解してないし、ブラックボックス的にTensorflowを使いました。
どのようなロジックで手書き文字の学習がされているのか正直わからん。(ザコ)
TensorFlow公式ドキュメントを参照。
 

MNISTとは

f:id:tacky0612:20170618225924p:plain

「Mixed National Institute of Standards and Technology database」の略で、機械学習Hello worldと呼ばれるているヤツ。
アメリカ国立標準技術研究所(National Institute of Standards and Technology, NIST)が提供するデータ。
28×28の784個のピクセルの0〜9の手書き数字のデータセットのこと。55000個の学習データ (mnist.train)と10000個のテストデータ (mnist.test)と5000個の検証用データ (mnist.validation) が画像データとメタデータとしてどの数字を表すのかをラベルデータが与えられている。
今回、手書き文字の推定をするプログラムを作りたい。
 
環境の整え方などは前の記事を参照。
 

 

TensorFlowの処理の流れ

  1. TensorFlow読み込み
  2. 式を立てる(モデル)
  3. セッションを開始
  4. 式を実行(run)

 

機械学習の3ステップ

  1. 現象をモデル化する
  2. モデルを最適化するパラメータを求める
  3. 学習したモデルを使用して推定・分類

 

このチュートリアルで何をするか

MNISTデータとソフトマックス回帰について学ぶ。
イメージ内のすべてのピクセルを調べることに基づいて、数字を認識するためのモデルを作成する。
TensorFlowを使用して、学習データを見て数字を認識させるようにモデルを訓練します。
テストデータでモデルの精度をチェックする。
 
 

実装

早速チュートリアルのコードを実装してみる。
from tensorflow.examples.tutorials.mnist import input_data
 
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
MNIST_data/ がダウンロード先。
まずはこのコマンドで必要なものをダウンロード。
 
import tensorflow as tf
TensorFlowをtfとしてインポート
x = tf.placeholder(tf.float32, [None, 784])
placeholderという入れ物を用意する。イメージ的にC言語で言う int i; みたいなもんかな?(違う?)
 
一応よく使うヤツなので使い方↓
placeholder(
    dtype,                       #https://www.tensorflow.org/api_docs/python/tf/DType
    shape=None,            #与えられる行列の形状(オプション)。形状が指定されていない場合は、任意の形状のテンソルを供給することができます。
    name=None              #操作の名前(オプション)。
)

次に、変数を定義。

W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
Variableは変数のこと。zerosで0で埋めてあげる。
Wは重み、bはバイアス。
10は0〜9の数字があるので。
y = tf.nn.softmax(tf.matmul(x, W) + b)
確率を格納する為の変数をyとする。matmul は行列の掛け算。
y_ = tf.placeholder(tf.float32, [None, 10])
ここ(y_)に正解データ(ラベルデータっていうのかな?)を格納する。
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
cross_entoropyに推定値とラベルデータの差分
ぶっちゃけこの計算のロジックはわからん。教えてくれ。 
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
train_stepが学習ステップ。重みを最適化して更新する。
GradientDescentOptimizerは勾配降下法のことっぽい。()の中は学習率。
参考までに、TensorFlowのOptimizer一覧(

https://www.tensorflow.org/api_guides/python/train#optimizers

 )
cross_entropyをminimizeで小さくなるように学習する。 
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
これはオマジナイ。心を無にするのだ。
for _ in range(1000):
  batch_xs, batch_ys = mnist.train.next_batch(100)
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
for文で1000回、バッチ(100個のランダムで選択したデータを入れたもの)でtrainする。feed_dictでxにbatch_xs, yにbatch_ysを指定する。placeholderには、feed_dictを通じて値を外挿できる。
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1)) 
結果の評価をする。推測とラベルデータの差を評価。argmax()で行列の中で最も大きな値(確率が一番大きいやつ)を持っているところを一つ取ってくるヤツ。
equal(a,b)でa=bならTrue,  a≠bならFalseを吐く。
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
reduce_meanで精度の平均値を出す。
True,Falseでは計算出来ないのでcastで数値(割合)に変換。
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
print文で計算結果を出力する。
 

f:id:tacky0612:20170618231225p:plain

 
ちなみに僕は91.87%の精度でした。
 
 

だがしかしこれはまだ深層学習ではない

だがしかしこれはまだ深層学習(Deep Leaning)ではない。(大事なことなので(ry)
 
 

 

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

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

 

 

 

深層学習 (機械学習プロフェッショナルシリーズ)

深層学習 (機械学習プロフェッショナルシリーズ)

 

 

 
 

最後に 

なんとなく考えとか整理するのに書き始めたけど、アレ(遅い)。
こうやってブログに起こすのめんどくさいだけで、実はTensorFlowのチュートリアルは一通りやった。
ただこうやって書いてて実は理解してなかったところとかを発見出来たりするのでよい。
ちょっと長いコード書くとなるとPythonインタラクティブシェル使うのダルいのでJupiterNorebook使うとよい。(よい。)
Pythonはコードが読みやすいのでよい。おっPython
 
公式ドキュメントの最後らへんに

Is that good? Well, not really. In fact, it's pretty bad. This is because we're using a very simple model. With some small changes, we can get to 97%. The best models can get to over 99.7% accuracy!

 

ってあるけどかっこよすぎん?(?) まだ力を秘めているボス的な感覚。
TensorFlow「まだ本気じゃねえんだぜ…!」って。
 
 

そういや今年の6月は雨が少ないですね。

 

初心者による初心者の為のTensorFlowを使用したHello,Worldまでを解説してみるって話。

f:id:tacky0612:20170531012239p:plain

どうもこんにちは、たっきーです。
今回はTensorflowの”Hello, world”をAnacondaを使用して試してみました。あとちょっとした四則演算。
人間がTensorflow試してみたよ〜〜って色々書いてるけど、僕みたいなクソザコに頭が追いつくようなものは中々なかったので僕が書く。
けんきう室にGPU搭載のハイスペックPCがあるけど、今回は動作確認という事で手持ちのMacBook Pro(Late2016)でササッと動かしてみた。
 

環境

参考程度にMacBook Proのスペックです。

f:id:tacky0612:20170531012806p:plain

macOS Sierra(10.12.4)です。
 
事前知識としてPythonについて知っているとスムーズに進むかなぁと。
おっPython
 
 

TensorFlowとは

Googleが公開したオープンソースディープラーニングライブラリのこと。
 
公式はこちら↓
 
英弱なのでチュートリアル読むので一苦労。
Let's study English!!
 
使っていることを明記すれば商用利用もできるらしい。
いろんな大きな会社も利用しているみたい。今やビッグデータ時代なので機械学習が注目されてますね。
これはTensorFlowを利用している企業さん。見たことのあるロゴばかりですね。

f:id:tacky0612:20170531013005p:plain

 

 

Anacondaとは

f:id:tacky0612:20170531013251p:plain

インストールがめんどいライブラリが最初から入っているとてもリッチなPythonのパッケージ。
ちょっといらないものも入りすぎてるおデブちゃんなんだけど、いらないものを削ったMinicondaというのもあるみたい。詳細は知らん。
公式ドキュメントには
The Anaconda installation is community supported, not officially supported.
って書かれてるけど気にしない。
ダウンロードページがカッコイイ。
こういうおしゃんなダウンロードページだとこれから学習するモチベすごい上がりますよね(伝われ…!)
 

f:id:tacky0612:20170531013554p:plain

自分のOSに合ったモノをインストール。Python3.5の方を選ぶ。
基本的に次へ次へ次へ完了でおk。
 
 

Tensorflowの導入

とうとう導入です。
 
こちらがAnacondaを使用したTensorflowのインストール方法。
ターミナルを立ち上げ、一応自分のPythonのバージョン確認しとく
$ python —version

f:id:tacky0612:20170531013941p:plain

Python 3.5.2 :: Anaconda 4.2.0 (x86_64)って表示され現在のVersionを確認できる。
ターミナルの立ち上げ方はggrks
 
次に、Tensorflowをインストールする。以下コマンド。tensorflowって名前で環境を作ってくださいねってコマンド。一応Pythonのバージョンを指定しておく。
$ conda create -n tensorflow python=3.5

f:id:tacky0612:20170531014015p:plain

するとこんなツールをインストールしますか?って聞いてくるので y を押して Enter を押す♂。
 
次にTensorflowの実行環境に入るために以下コマンド。
$ source activate tensorflow

f:id:tacky0612:20170531014721p:plain

このように、先頭に(tensorflow)と表示されるとTensorflowの実行環境に移れたってこと。おk。
 

必要なライブラリのインストー

次に、以下コマンドを使うと必要なパッケージを勝手に選んで入れてくれる。Anaconda良い。
$ conda install -c conda-forge tensorflow

f:id:tacky0612:20170531015406p:plain

さっきと同じでyを押してインストール。

 

これで上手く行かない場合は、公式ドキュメントにあるようにpipを使ってインストールしていこう。

condaコマンドを使う方が簡単。
 

いよいよTensorflowで”Hello, world!”

Run a short TensorFlow programというのが公式ドキュメントにある。これはいわゆる”Hello, world!”的な奴。TensorFlowが正常に動いているか確認するためのサンプルコード。
 
以下コマンドをターミナルで叩くとPythonの対話的実行環境に入れる。インタラクティブシェルって言うみたい。カッコイイ。
なんかごちゃごちゃ出てきて最終的に「>>>」って表示されるとインタラクティブシェルに入れてる。
 
まずはTensorFlowをtfと言う名前としてimportする。
>>> import tensorflow as tf
これでEnterを押して次の「>>>」が表示されるとTensorFlowのインストールが上手くいってるってこと。
 
以下コマンドで”Hello, world”。('Hello, TensorFlow!'じゃねーか!ってツッコミは無しで
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))

f:id:tacky0612:20170531021213p:plain

W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.

W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.

W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.

W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.

W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.

なんかしらんがsess = tf.Session()の次にすごい警告が出てきた。よく分からんが、エラーでは無いので無視しておく。トラブルシューティング力のNASA
まぁ、無事にHello, TensorFlow!と表示されてるのでセーフ。(適THE当)
 

折角なので、簡単な四則演算も実行してみる

簡単な四則演算もTensorFlow環境下で実行してみよう。
以下コマンドで文字式の四則演算を実行してみる。
ちなみにconstantは一度値を格納したら変更できないヤァツ。

>>> a = tf.constant(10)

>>> b = tf.constant(32)

>>> print(sess.run(a + b))

>>> print(sess.run(a * b))

>>> print(sess.run(a - b))

>>> print(sess.run(a / b))

f:id:tacky0612:20170531023229p:plain

はい、想定通りですね。

 

終了方法

最後に後片付けしましょう。
Pythonインタラクティブシェルを抜けるには以下コマンド。

>>> exit()

 

 
あとはTensorFlowの実行環境の抜け方は以下コマンド。
$ source deactivate tensorflow
 
これにて終了〜〜。
 

最後に

思ってたよりも長々と書いてしまった。気がつけば4000文字程度書いてるやん。つらい(つらい)#つらい
僕は深層学習始めたばかりの全く初心者なので何か気になった点などあれば教えてください。
TensorFlowには幾つかチュートリアルが用意されてるのでクリアしていこうかな。
次はTensorflowを用いたMNIST(手書き文字認識)のこととか書いていこうと思う。(多分)
間違いなどあれば教えてください。随時、修正していきます。

 

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

 

 

 

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

 

 

 

呟き。

 

奈良先端科学技術大学院大学のオープンキャンパスに行ってきた話。

どうもこんにちは。たっきーです。
5/13(土)に開催された奈良先端科学技術大学院大学オープンキャンパスに行って刺激を受けてきたのでそのことについて書きます。
以下、個人的な見解と偏見。情報は執筆時点でのもの。

奈良先端科学技術大学院大学とは

奈良先端科学技術大学院大学

f:id:tacky0612:20170517003712j:plain


英語名はNara Institute of Science and Technology。略してNAIST
国立大学法人である。

特徴としては、
・学部がなく大学院のみある大学
情報科学研究科・バイオサイエンス研究科・物質創成科学研究科から成る理THE系。
・学生数に対して教員の数が多い。

今回僕が見学してきたのは情報科学研究科である。

f:id:tacky0612:20170517003738j:plain

www.naist.jp

いいと思った点

・やりたい研究に没頭できる。

田舎に立地してある。故に周りに誘惑するものがない。故に研究に没頭できる。Let's ラボ畜。

 

・いろんな大学や高専出身の人がいる。

割合としてはやはり近畿圏の学生が多いが、いろんな地方から学生がやってくる。留学生も多い。しかし理系ということもあって女子学生が少ない。なんなら留学生のほうが女子学生よりも多いぐらい。
あと、文系出身や他学部出身の人も多いみたいで色んな視点から研究へアプローチをかけられるチームが形成されるってのは良いことなんじゃないかな。

 

・学部生がいないので一人あたりのスペースが広い。

結構広いなと思った。しかも生徒数が1000人ほどなので学生一人あたりのスペースが広い。

www.naist.jp

 

・校舎が綺麗

めっちょ綺麗だった。建物内も明るくて清潔感があり、トイレも綺麗だった。
そして各階エレベータ前には謎の円弧型の壁(柱?)がある。

 

・潤沢な研究機材。

いろんな研究機関とかと連携してたり、研究成果のライセンス料やらでめちゃめちゃお金あるみたい。

www.naist.jp

 

・国立大学なので学費が安い。

入学料282,000円、授業料年額535,800円と国立大学のスタンダードな値段。
私立に比べてとてもお安い。

 


悪いと思った点

・田舎である。

山の中に大学があるとは前々から聞いていたが、田舎である。
ちょっと何処かに買い物しに行きたいってなると足がないとちょっとつらいかも。
最寄り駅まで徒歩20分という。高校生時代を思い出す。
研究環境は素晴らしいのに生活環境はシティボーイには悪い。
ちなみに大阪難波まで電車で1時間ほどで行ける…。
でも、田舎生まれ田舎育ちの僕からしたら都会は窮屈なのであまりマイナス点ではない。

知名度が低い。

NAIST、もとい奈良先端科学技術大学院大学。名前の雰囲気としてはF欄っぽい名前である。知名度が低くネームバリューは弱い。僕の友達で、奈良に住んでいてNAISTからも車で20分圏内に住んでいる大学生ですら認知していなかった。そもそも大学院しかないのでその分、知名度が低い。
ただ、情報系の分野において知名度は高いような気がします。僕の研究室の先生も評価していて、ニューラルネットの論文とか読んでるとたまーに名前を見かける。

 

・学生宿舎がボロい。

外見的には綺麗だけど、いざ門をくぐり抜けるとボロい。壁とか黒ずんでる箇所がちらほら。潔癖症ではないが、生活の拠点が綺麗でないのはあまりいただけない。あと、トイレと風呂がフロアで共用である。
あと、とても狭い。13m^2しかない。
しかし、家賃は光熱費込で1万ととても安いらしい。

www.naist.jp

 

・課外活動が少ない。

課外活動が少ない。(公式の課外活動が少ないだけで有志でやってる団体もいるかも…?)
まぁ院生だけだしそんな課外活動に従事する暇ないか。

www.naist.jp

 

 

気になった研究を3つ

全部の研究を見てきたわけではないが、個人的に気になった、印象的だった研究について書く。多くを語りすぎると間違いを言ってしまう気しかしないので簡潔に。


・多重高周波照明による半透明物体内部のスライス可視化

文献が転がってたので貼っておきます↓

http://omilab.naist.jp/~mukaigawa/papers/CVIM2015-MFI.pdf

私達が絵画を見る時は完成した形の絵しか見れないが、この手法ではカメラとか光の反射とかの特性をうまく利用して下書きまで見ることができるという研究。デモをしていただいたがすごかった(語彙)
あと、この光メディアインターフェース研究室、めっちゃおしゃんだった。カメラもレンヅもいっぱい転がってあった。よき。


・カメラ画像から制御則を学習する新しい深層強化学習アルゴリズムを開発

産業用双腕ロボットのNextageってのを使って布をうまくひっくり返すという研究。地味だけどすごい。
ランダムに布をロボットが動かし、そのパターンを機械学習にぶちこみ学習させ、どう動かせば最小の動作で布をひっくり返せるかを人工知能が判断する。
ちなみにロボットアームからのフィードバックを得て制御しているわけではなく、センシングはカメラのみらしい。すごいぞ知能システム制御研究室。


・Visuo-Hapticシステム

 

imd.naist.jp


いわゆるMRってやつ、HMDをかけると対象物が見れ天井からぶら下がったスティックでCGに触れると触った感覚がリアルに伝わってくるというやつ。
視覚的情報だけでなく、触覚的情報も支配されてる感じがあった。一般家庭とかでも扱える形まで持っていけるとゲームとかすごく面白くなりそう。

 

 

感想

第一印象としては”校舎がとても綺麗”。
めちゃ綺麗だった。あと広いし明るいしおしゃん。
建物の階段の色だが、情報科学研究科が赤、
ところで大学のオープンキャンパスっていっぱいあるけどさ、大学院のオープンキャンパスってすくないよな…。
僕は高校生の時に大阪大学名古屋工業大学三重大学オープンキャンパスに遊びに行ったことあるけど、他人の研究とか見ててすごい刺激的だし大学院志望の学生に向けてのオープンキャンパスをもっと開いてほしいなと感じました。
ここで受けた刺激を燃料に僕も研究頑張ります。

 


面白いなと思ったNAIST紹介↓

anond.hatelabo.jp

 

 

悪ノリでOC後に大阪寄ってきました

 

スポンサードリンク