Giter Site home page Giter Site logo

tensorflow's Introduction

TensorFlow

Googleが人工知能・機械学習ソフトウェアTensorFlowをオープンソース化したので、触ってみたいと思います。

インストール環境

ubuntu 14.04LTS 64bit

downloadとinstall

OSによって方法が変わります。詳細はここを参照して下さい。

Ubuntu/Linux

まず,pipをインストールしてください.

pipはPythonで書かれたパッケージソフトウェアをインストール・管理するためのパッケージ管理システムである.

# Ubuntu/Linux 64-bit
$ sudo apt-get install python-pip python-dev

次にTensorFlowをインストールします.

# For CPU-only version
$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl

# For GPU-enabled version (only install this version if you have the CUDA sdk installed)
$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl

VirtualEnv

VirtualEnvを使用したインストールを推奨していたため、再度インストールしました.

※VirtualEnv:Pythonの仮想環境を提供するもの.

$ sudo apt-get install python-pip python-dev python-virtualenv

次に,virtualenvの環境設定を行います.

$ virtualenv --system-site-packages ~/[ディレクトリ名]
$ cd ~/[ディレクトリ名]

virtualenvをアクティブにするには以下のコマンドを用います。

$ source ~/[ディレクトリ名]/bin/activate  # If using bash
$ source ~/[ディレクトリ名]/bin/activate.csh  # If using csh
(tensorflow)$  # Your prompt should change

virtualenv内でTensorFlowをインストールします。

(tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl

もし,ここからcloneしてきたのであればインストール中に 誤ったインタプリタですと怒られると思います.
その時はtensorflow/binにあるpipを次のように書き換えてください.

#befor
#!/home/shimadakento/tensorflow/bin/python

#after
#!/home/[ユーザー名]/[ディレクトリ名]/bin/python

TensorFlowを動作させる

python terminalを開きます。

$ python

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print sess.run(hello)
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print sess.run(a+b)
42
>>>

上記のように動けばインストール成功です。

MNIST For ML Beginners

TensorFlowの使い方を覚えるために、チュートリアルをやっていきます。

以下,ソースコードです.詳細は後述します.

# -*- coding: utf-8 -*-

import input_data
import tensorflow as tf

# MNISTのデータセットのダウンロードと読み込み
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

# シンボリック変数
x = tf.placeholder("float", [None, 784])

# 重みとバイアスを表す変数を用意
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))

# softmaxの計算
y = tf.nn.softmax(tf.matmul(x,W) + b)

# 訓練時に真のラベルの値を入れるための変数
y_ = tf.placeholder("float", [None,10])

# 交差エントロピーの計算
cross_entropy = -tf.reduce_sum(y_*tf.log(y))

# 学習方法の定義(ステップサイズ0.01の勾配法で交差エントロピーを最小化)
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

# セッションの準備
sess = tf.Session()

# 変数の初期化
init = tf.initialize_all_variables()
sess.run(init)

for i in range(1000):
  # 使用するデータの選択
  batch_xs, batch_ys = mnist.train.next_batch(100)
  # 勾配を用いた更新
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
# 正答率の計算  
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
# 結果の出力
print sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})

The MNIST Data

まず手書き数字認識のチュートリアルを始める前に, 使用するデータセットをインポートする必要があります.
そこで,ここのコードをinput_data.pyで同じディレクトリに保存してください.
これで,以下のコードでMNISTデータをインポートできるようになります.

import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

すべてのMNISTデータは2つの部分(画像とラベル)からなっており,ここでは 画像をxs,ラベルをysと呼びます.例えば,訓練画像はmnist.train.images ,訓練ラベルはmnist.train.labelsとなっています.

このチュートリアルでは簡単のため画像データを28281=784の数値, つまり二次元の数字の集まりを横一列に並べたものとしている.

mnist.train.imagesは[55000, 784]の配列,mnist.train.labelsは[55000, 10]の配列です.
例えば,3というラベルは[0,0,0,1,0,0,0,0,0,0]と表される.

Softmax Regressions(ソフトマックス回帰)

softmax回帰はいくつかの異なるものの一つであるオブジェクトに確率を割り当てたいときに用いられます.

ソフトマックス回帰は,次の2ステップで行われます.

  1. 特定のクラスに含まれる入力のevidenceを合計する.
  2. evidenceを確率に変換する.

与えられた画像が特定のクラスに含まれるというevidenceを総計するためにピクセル強度 の加重和を計算します.高い強度を持つピクセルがそのクラス内の画像に反するevidence であるならば,重みは負となります.一方で,合致すようなevidenceであれば正となります.

具体的には重みは[784, 10]のテンソルであり,画像中の1pixelが09である可能性を 表しています.例えば,先の1の画像の場合,左上のpixelは[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] となることが多く,これは左上のpixelが09のいずれにも影響を及ぼさないことから明らかです.

次の画像はあるモデルがこれらのクラス各々から学んだ重みを示しています.ここで, 赤は負,青は正の重みを表します.

また,バイアスと呼ばれるevidenceも加えます.その結果evidenceは次ように表されます.

ここで,wは重み,biはクラスiのバイアス,jは入力画像x内のピクセルを加算するための インデックスです.そして,計算されたevidenceを予測される確率にsoftmax関数によって変換します.

ここでソフトマックスは線形関数の出力を望みの形に整形する 「活性化」あるいは「リンク」関数として振る舞います (今回のケースでは10個の数字の確率分布). evidenceの合計を入力が各クラスに含まれる確率に変換するものと考えることができ, 次の式で定義されます.

また,式を拡張すると次式が得られます.

10個の出力の総和が1となることで確立と解釈することが可能になります.
exp()関数は,値がマイナスにならないように使用され,これにより値がマイナスにならず, かつ総和が1となるため確率と解釈ができます.

ソフトマックス回帰は次のように表現できます.

方程式として書くならば次のように表現できます.

行列とベクトルを用いると

となり,まとめると

と表現できます.

tensorflow's People

Contributors

smjro avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.