LoginSignup
7
4

More than 5 years have passed since last update.

TensorFlowを使って簡単な機械学習をしてみた話

Posted at

チョと言います。
普段は主にCakePHP3を使ったWebアプリケーションの開発を行っています。

最近Pythonに興味があって個人的に触っています。

今回はTensorFlowを使って簡単な機械学習を作ってみた話を書きたいと思います。

対象者

・TensorFlowの初心者

環境

・macでdocker利用して開発を行います。

TensorFlowの特徴

・データフローグラフを利用した表現力
・コード修正なしでCPU/GPUモードで動く
・アイデアテストからサービスまで利用できる
Python /C++を支援する

設置

dockerのimageをとってcontainerを実行する

  1. まず、dockerの環境から設置しましょう。
    下記のURlを参考しながら、環境設定してください。
    https://docs.docker.com/engine/installation/mac/#/docker-for-mac

  2. 下記のコマンドを叩いてdocker imageからcontainer実行する
    docker run -it b.gcr.io/tensorflow/tensorflow-full

  3. 動作確認する

$ 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
>>>

ここまでするともう開発の環境設定ができました。

用語

環境設定ができたので、
TensorFlowで使う用語について覚えましょう。

Operation

グラフ上のノードはOperation(op)と呼ばれます。
Operationは1つ以上のTensorを受け取れます。
Operationは計算を実行した結果を1つ以上のTensorとしてreturnします。

Tensor

内部的にすべてのデータはTensorを通じて表現します。
Tensorは多次元配列のようなもので、グラフ内のOperationの間でTensorのみでやりとりします。

Session

グラフを実行するためにはSession objectが必要です。
SessionはOperationの実行環境をカプセル化したものです。

Variables

Variablesはグラフの実行したら、パラメーターを保存して更新するときに使います。
メモリ上でTensorを保存するbufferの役割です。

では、本客的にTensorFlowを使ってみましょう。

最急降下法で因子を探してみる

最急降下法の詳細は下記のURLを参考してください。
https://ja.wikipedia.org/wiki/%E6%9C%80%E6%80%A5%E9%99%8D%E4%B8%8B%E6%B3%95

加重値行列Wとバイアスb

import tensorflow as tf
import numpy as np

# Numpy randomで 100個のデータを入れる.
x_data = np.float32(np.random.rand(2, 100))
# 学習目標は下記の計算式で算出. (W = [0.1, 0.2], b = 0.3)
y_data = np.dot([0.100, 0.200], x_data) + 0.300

入力したデータとW,bを利用してモデルを定義する

# bは 0,
b = tf.Variable(tf.zeros([1]))
# Wは 1x2 形のウエート変数 (均等random値で初期化)
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y = tf.matmul(W, x_data) + b

# 損失関数定義
loss = tf.reduce_mean(tf.square(y - y_data))
# 最急降下法で損失関数を初期化(0.5は学習比率)
optimizer = tf.train.GradientDescentOptimizer(0.5)
# 学習Operation定義
train = optimizer.minimize(loss)

学習Session start

# すべての変数を初期化.
init = tf.initialize_all_variables()

# Session start
sess = tf.Session()
sess.run(init)

# 200回学習.
for step in xrange(0, 201):
    sess.run(train)
    if step % 20 == 0:
        print step, sess.run(W), sess.run(b)

結果

0 [[ 0.8228116   0.25179306]] [-0.21591029]
20 [[ 0.31065419  0.22789511]] [ 0.17903577]
40 [[ 0.15808699  0.20829338]] [ 0.26633102]
60 [[ 0.11601268  0.20247138]] [ 0.29062203]
80 [[ 0.10441278  0.20073807]] [ 0.2973859]
100 [[ 0.10121564  0.20022091]] [ 0.29927069]
120 [[ 0.10033476  0.20006624]] [ 0.29979634]
140 [[ 0.10009213  0.20001991]] [ 0.29994306]
160 [[ 0.10002533  0.20000601]] [ 0.29998407]
180 [[ 0.10000696  0.20000178]] [ 0.29999554]
200 [[ 0.10000192  0.20000054]] [ 0.29999873]    

感じたこと

・とりあえず、Pythonすげ、TensorFlowすげ。
・今回はExample課題としてあげていた問題を解けて見る中で数学をもっと勉強しないといけないと感じました。
・今回はPythonで機械学習を少し触ってみたので、他のところも触ってみたいと思います。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4