ページ

ラベル TensorFlow の投稿を表示しています。 すべての投稿を表示
ラベル TensorFlow の投稿を表示しています。 すべての投稿を表示

2016年7月2日土曜日

CentOS 7にTensorFlowをインストールする

自分メモ

以下のWindowsにVirutal Boxをインストールし実施


  • Virtual Box 5.0.22 r108108
  • 実施日:2016/06/28
  • OS CentOS-7-x86_64-Minimal-1511


普通にインストールしてネットワークが起動しない場合は以下を実施して対処

ネットーワークの起動
インストール時にonbootをonにしていない場合はこの設定が必要です。
$ nmcli c
=====
NAME UUID TYPE DEVICE
enp0s3 xxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxxxx 802-3-ethernet enp0s3
=========

enp0s3がデバイスのID

onbootを有効にする。
$ nmcli c m enp0s3 connection.autoconnect yes

ネットワークの再起動
$ systemctl restart NetworkManager
$ systemctl restart network

IPアドレスの確認
$ ip addr


pipのインストール
$ yum install -y epel-release
$ yum install -y python-pip
$ pip install pip --upgrade

その他ライブラリのインストール
$ yum install -y python-devel python-virtualenv

TensorFlowのインストール
$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl

TensorFlowの環境設定ファイルを設置
$ virtualenv --system-site-packages ~/tensorflow


TensorFlowの設定を呼び出し
$ source ~/tensorflow/bin/activate


$ vi test.py
========以下を貼り付け============
import tensorflow as tf
import numpy as np
==================================


$ python test.py
エラーが出なければ成功



まとめ
CentOS6系とかと比べてほとんど変わらないです。

2015年12月14日月曜日

Tensorflowで学ぶ最急降下法

Tensorflowで学ぶ最急降下法

ありきたりですが、Tensorflowの初期サンプルに掲載されている
最急降下法(train.GradientDescentOptimizer)の解説です。

最急降下法とは、ある式を作りその式に基づき
微分を行いもっとも傾きから最小の値を算出する手法です。


TensorFlowのget startedにあるIntroductionが
この最急降下法のサンプルとなります。

大まかなフローとしては
Step1.初期データ作成
Step2.予測モデルする方程式を作成
Step3.ロス関数と目標設定を作成
Step4.最適化の実行
すごくざっくりですがこの4ステップで最急降下法を実現しています。


# おまじない
import tensorflow as tf
import numpy as np

### Step1.初期データ作成 ###
# ランダムなxの値を作成
x_data = np.random.rand(100).astype("float32")
# y = 0.1x + 0.3の式に基づいた値を算出
y_data = x_data * 0.1 + 0.3

### Step2.予測モデルする方程式を作成 ###
# W 上でいう aに値する係数を初期値として-1.0~1.0の範囲でランダム生成
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
# bの値を初期値0で作成
b = tf.Variable(tf.zeros([1]))
# y = W * x + bを再現
y = W * x_data + b

### Step3.ロス関数と目標設定を作成 ###
# 予想した結果y - 実際のyのデータ二乗した結果の平均をlossと位置付ける
loss = tf.reduce_mean(tf.square(y - y_data))
# Learning Rateの指定
optimizer = tf.train.GradientDescentOptimizer(0.5)
# lossが最小化する値を目的に置く
train = optimizer.minimize(loss)

### Step4.最適化の実行 ###
# TensorFlowの実行準備
init = tf.initialize_all_variables()

# graphの準備
sess = tf.Session()
sess.run(init)

# 201回の最適化を実行
for step in xrange(201):
sess.run(train)
# 20回毎に途中の値を出力
if step % 20 == 0:
print step, sess.run(W), sess.run(b)


この流れになります。
何の脈略もないのですが自己理解のための簡易解説となります。

2015年11月25日水曜日

TensorFlowについて事前知識編【乱数生成】

Googleから出た話題の機械学習用のライブラリTensorFlow
こちらを触ろうと思い奮闘の備忘録

機械学習なんてやったことない+Pythonも初なのでサンプルを理解しようとするだけで必死とりあえず
ちょっとずつまとめ
※インストール手順等は公式ドキュメントとかを見て対応していただきますようにお願いいたします。
そのあたりはQiitaとかの方がすごく良いドキュメントがあります。

チュートリアルを見たらデータの生成があるのですが
まずはここからつまづいたのでまとめる

ランダムデータを作成する段階でわからなかった・・・・
じつはこの「np.float32」、「np.random.rand(2, 100)」はimport文を見たらわかるのですが
TensorFlowとは違いnumpyと言う数学用のライブラリです。
Python発なのでわからなかった(汗汗

と事前にnumpyについて少し備忘録をまとめます。

x_data = np.float32(np.random.rand(2, 100)) # Random input
これの意味ですが、0.0〜1.0までの乱数を2次元配列で100個作るという意味になります。

もっと値を小さくして2次元配列を5個つくるを実行
import numpy as np
x_data = np.float32(np.random.rand(2, 5))
print x_data
実行結果が以下

[[ 0.22113453 0.77961475 0.08531918 0.12012649 0.43397358]
[ 0.72542971 0.40160421 0.13799493 0.22445418 0.3758058 ]]


x_data = np.float32(np.random.rand(2, 5))
この中の2が次元を5が個数を表しているので変更すれば
相当な次元のデータが出来ると思います。


2次元配列で5個のランダム数が出来上がりました。
では、次に1〜10の少数にしたいであればどうするかは10をかけるだけです

import numpy as np
x_data = np.float32(np.random.rand(2, 5)) * 10
print x_data

[[ 5.39343119 5.11242962 2.86795855 7.04219055 6.99380398]
[ 1.75642431 2.2877152 8.44399357 4.74935007 5.61556864]]


高校数学の行列のイメージで0.0〜1.0の間の数字に10をかけてくれます。
ではさらに、1〜10の整数はどうするのか?
答えは以下です。

import numpy as np
x_data = np.int32(np.random.rand(2, 5) * 10)
print x_data

[[4 8 3 5 8]
[1 2 0 8 0]]


なんとなくfloat32をint32に変更すればうまいこといくと思ったのですが
先に10をかける必要がありました。 ということは0.0〜10.0までの少数も先に10をかけることも可能ということでした。
まだまだ難しい・・・

こちらを応用すれば整数は無限と出来ると思います。
64bit型がないか確認しところ以下できるみたいです。

x_data = np.int64(np.random.rand(2, 5) * 10)
x_data = np.float64(np.random.rand(2, 5) * 10)


なんかこれ以外とテストデータ作成もこれでできそうな気がしてたw
まずは基礎の基礎かと思いますが以上乱数生成に関する内容でした。