Ubuntu
OSX
MachineLearning
DeepLearning
TensorFlow

TensorFlow 環境構築 + fully_connected_feed.py 実行を3分でやってみる

More than 1 year has passed since last update.


はじめに

機械学習およびディープラーニングの代表的なライブラリ/フレームワークの一つであるTensorFlowに関して、初めて動かす人向けのメモです。いろんなサイトを参考にさせていただきましたが、自身のマシンの環境などで違ったエラーが出たりするかもしれないので、手順のセクションで、うまくいかなかった場合、ヒントになるようなことが参考にあるかもしれないです。

この記事では Ubuntuの場合とOSXの場合を紹介します。


OS X

OSX環境で実行したい場合はこちらが圧倒的に参考になります


http://senyoltw.hatenablog.jp/entry/2016/05/07/231041



環境

Screen Shot 2016-12-03 at 02.11.59.png


  • OSX 10.11.4 El Capitan

  • Python 2.7.10

$ python -V

Python 2.7.10


手順


[1]. 環境構築

pipとかが入っていない場合はsudo easy_install pipで入れてあげて、以下のようにtensorflow環境を整えます。

$ sudo easy_install pip

$ sudo pip install --upgrade virtualenv

ここで、他のPython環境でいろいろ問題を起こさないように、仮想環境としてtensorflowというディレクトリを用意します。

$ mkdir ~/tensorflow

$ virtualenv --system-site-packages ~/tensorflow

いよいよ、仮想環境内でtensorflowをインストールします。

$ source ~/tensorflow/bin/activate

(tensorflow) $ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.8.0-py2-none-any.whl

また補足として、$ deactivateで抜けることができます。


[2]. チュートリアルのコードの準備

任意のディレクトリで(今回はworkdirにしました)修正されているブランチのチュートリアルコードをcloneしてきます

workdir$ git clone -b r0.11 https://github.com/tensorflow/tensorflow.git

workdir$ cd tensorflow/


[3]. fully_connected_feed.py の実行

まず、好きなエディタで

fully_connected_feed.py の30,31行目を次のように修正します


修正前.py

from tensorflow.examples.tutorials.mnist import input_data

from tensorflow.examples.tutorials.mnist import mnist


修正後.py

import input_data

import mnist

最後に実行してみます

workdir$ cd tensorflow/

workdir/tensorflow$ python tensorflow/examples/tutorials/mnist/fully_connected_feed.py
Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Extracting data/train-images-idx3-ubyte.gz
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Extracting data/train-labels-idx1-ubyte.gz
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Extracting data/t10k-images-idx3-ubyte.gz
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting data/t10k-labels-idx1-ubyte.gz
Step 0: loss = 2.30 (0.016 sec)
Step 100: loss = 2.17 (0.011 sec)
Step 200: loss = 1.91 (0.011 sec)
Step 300: loss = 1.65 (0.011 sec)
Step 400: loss = 1.36 (0.013 sec)
Step 500: loss = 0.91 (0.012 sec)
Step 600: loss = 0.83 (0.012 sec)
Step 700: loss = 0.74 (0.012 sec)
Step 800: loss = 0.62 (0.013 sec)
Step 900: loss = 0.60 (0.012 sec)
Training Data Eval:
Num examples: 55000 Num correct: 47143 Precision @ 1: 0.8571
Validation Data Eval:
Num examples: 5000 Num correct: 4308 Precision @ 1: 0.8616
Test Data Eval:
Num examples: 10000 Num correct: 8595 Precision @ 1: 0.8595
Step 1000: loss = 0.39 (0.013 sec)
Step 1100: loss = 0.52 (0.100 sec)
Step 1200: loss = 0.44 (0.012 sec)
Step 1300: loss = 0.40 (0.013 sec)
Step 1400: loss = 0.52 (0.012 sec)
Step 1500: loss = 0.34 (0.012 sec)
Step 1600: loss = 0.40 (0.011 sec)
Step 1700: loss = 0.30 (0.012 sec)
Step 1800: loss = 0.37 (0.012 sec)
Step 1900: loss = 0.27 (0.012 sec)
Training Data Eval:
Num examples: 55000 Num correct: 49315 Precision @ 1: 0.8966
Validation Data Eval:
Num examples: 5000 Num correct: 4509 Precision @ 1: 0.9018
Test Data Eval:
Num examples: 10000 Num correct: 8949 Precision @ 1: 0.8949

こんな感じになれば成功です。


Ubuntu


環境


  • Ubuntu 14.04.5

$ lsb_release -a

LSB Version: core-2.0-amd64:core-2.0-noarch:core-3.0-amd64:core-3.0-noarch:core-3.1-amd64:core-3.1-noarch:core-3.2-amd64:core-3.2-noarch:core-4.0-amd64:core-4.0-noarch:core-4.1-amd64:core-4.1-noarch:security-4.0-amd64:security-4.0-noarch:security-4.1-amd64:security-4.1-noarch
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04
Codename: trusty


  • Python 2.7.6

$ python -V 

Python 2.7.6


手順


[1]. 環境構築

pipとかが入っていない場合はsudo easy_install pipで入れてあげて、以下のようにtensorflow環境を整えます。

$ sudo pip install --upgrade virtualenv

$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl
$ sudo pip install --upgrade pip


[2]. チュートリアルのコードの準備

OSXと同様です。一応以下にも同じことを書きます。

任意のディレクトリで(今回はworkdirにしました)修正されているブランチのチュートリアルコードをcloneしてきます

workdir$ git clone -b r0.11 https://github.com/tensorflow/tensorflow.git

workdir$ cd tensorflow/


[3]. fully_connected_feed.py の実行

OSXと同様です。一応以下にも同じことを書きます。

まず、好きなエディタで

fully_connected_feed.py の30,31行目を次のように修正します


修正前.py

from tensorflow.examples.tutorials.mnist import input_data

from tensorflow.examples.tutorials.mnist import mnist


修正後.py

import input_data

import mnist

最後に実行してみます

workdir$ cd tensorflow/

workdir/tensorflow$ python tensorflow/examples/tutorials/mnist/fully_connected_feed.py
Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Extracting data/train-images-idx3-ubyte.gz
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Extracting data/train-labels-idx1-ubyte.gz
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Extracting data/t10k-images-idx3-ubyte.gz
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting data/t10k-labels-idx1-ubyte.gz
Step 0: loss = 2.30 (0.016 sec)
Step 100: loss = 2.17 (0.011 sec)
Step 200: loss = 1.91 (0.011 sec)
Step 300: loss = 1.65 (0.011 sec)
Step 400: loss = 1.36 (0.013 sec)
Step 500: loss = 0.91 (0.012 sec)
Step 600: loss = 0.83 (0.012 sec)
Step 700: loss = 0.74 (0.012 sec)
Step 800: loss = 0.62 (0.013 sec)
Step 900: loss = 0.60 (0.012 sec)
Training Data Eval:
Num examples: 55000 Num correct: 47143 Precision @ 1: 0.8571
Validation Data Eval:
Num examples: 5000 Num correct: 4308 Precision @ 1: 0.8616
Test Data Eval:
Num examples: 10000 Num correct: 8595 Precision @ 1: 0.8595
Step 1000: loss = 0.39 (0.013 sec)
Step 1100: loss = 0.52 (0.100 sec)
Step 1200: loss = 0.44 (0.012 sec)
Step 1300: loss = 0.40 (0.013 sec)
Step 1400: loss = 0.52 (0.012 sec)
Step 1500: loss = 0.34 (0.012 sec)
Step 1600: loss = 0.40 (0.011 sec)
Step 1700: loss = 0.30 (0.012 sec)
Step 1800: loss = 0.37 (0.012 sec)
Step 1900: loss = 0.27 (0.012 sec)
Training Data Eval:
Num examples: 55000 Num correct: 49315 Precision @ 1: 0.8966
Validation Data Eval:
Num examples: 5000 Num correct: 4509 Precision @ 1: 0.9018
Test Data Eval:
Num examples: 10000 Num correct: 8949 Precision @ 1: 0.8949

こんな感じになれば成功です。


参考サイト

私がUbuntuで試す際にトライアンドエラーした順番に並べています。この知見を得た上で上の手順のセクションを書きました。

ベースはこちらを参考にしました


http://d.hatena.ne.jp/shu223/20160105/1451952796


「動作確認:Hello World を実行してみる」ってとこまではうまくできました。

途中で

.....(略).....

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
.....(略).....

みたいなのが怒られて、.bashrcに以下を追記みたいな感じでした。記事は以下のものを参考にしました。


http://d.hatena.ne.jp/tkrd/20120828/1346123699


export LC_ALL=en_US.UTF-8

ここで、「fully_connected_feed.py を実行します。」あたりで

$ python tensorflow/examples/tutorials/mnist/fully_connected_feed.py 

Traceback (most recent call last):
.....(略).....
ImportError: /home/hiroki11x/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/_pywrap_tensorflow.so: invalid ELF header

そのため

$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.6.0-cp27-none-linux_x86_64.whl

とすると

$ python tensorflow/examples/tutorials/mnist/fully_connected_feed.py 

ImportError: No module named contrib.learn.python.learn.datasets.mnist

みたいなことで怒られる

同じことで困ってる人がいたので、以下のstackoverflowを参考に

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

$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl


http://stackoverflow.com/questions/37002134/having-error-with-tensorflow-mnist


をするとこれについては直ったが

$ python tensorflow/examples/tutorials/mnist/fully_connected_feed.py 

.....().....
ImportError: No module named protobuf

となる、

mac環境でpython3.3以上の場合はsixが必要らしいのと、いろいろ、違うバージョンのprotobufが入ってしまったようなので以下を実行

$ sudo easy_install --upgrade six

$ sudo pip install --upgrade
$ sudo pip uninstall protobuf
$ sudo pip install protobuf

次に、

$ python fully_connected_feed.py 10

Traceback (most recent call last):
File "fully_connected_feed.py", line 279, in <module>
tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
TypeError: run() got an unexpected keyword argument 'argv'

が出てくるので、その問題を解決してるブランチがあるっぽいので、そっちをcloneすることに

$ git clone -b r0.11 https://github.com/tensorflow/tensorflow.git

$ cd tensorflow/
$ python tensorflow/examples/tutorials/mnist/fully_connected_feed.py
Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Extracting data/train-images-idx3-ubyte.gz
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Extracting data/train-labels-idx1-ubyte.gz
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Extracting data/t10k-images-idx3-ubyte.gz
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting data/t10k-labels-idx1-ubyte.gz
Step 0: loss = 2.30 (0.016 sec)
Step 100: loss = 2.17 (0.011 sec)
Step 200: loss = 1.91 (0.011 sec)
Step 300: loss = 1.65 (0.011 sec)
Step 400: loss = 1.36 (0.013 sec)
Step 500: loss = 0.91 (0.012 sec)
Step 600: loss = 0.83 (0.012 sec)
Step 700: loss = 0.74 (0.012 sec)
Step 800: loss = 0.62 (0.013 sec)
Step 900: loss = 0.60 (0.012 sec)
Training Data Eval:
Num examples: 55000 Num correct: 47143 Precision @ 1: 0.8571
Validation Data Eval:
Num examples: 5000 Num correct: 4308 Precision @ 1: 0.8616
Test Data Eval:
Num examples: 10000 Num correct: 8595 Precision @ 1: 0.8595
Step 1000: loss = 0.39 (0.013 sec)
Step 1100: loss = 0.52 (0.100 sec)
Step 1200: loss = 0.44 (0.012 sec)
Step 1300: loss = 0.40 (0.013 sec)
Step 1400: loss = 0.52 (0.012 sec)
Step 1500: loss = 0.34 (0.012 sec)
Step 1600: loss = 0.40 (0.011 sec)
Step 1700: loss = 0.30 (0.012 sec)
Step 1800: loss = 0.37 (0.012 sec)
Step 1900: loss = 0.27 (0.012 sec)
Training Data Eval:
Num examples: 55000 Num correct: 49315 Precision @ 1: 0.8966
Validation Data Eval:
Num examples: 5000 Num correct: 4509 Precision @ 1: 0.9018
Test Data Eval:
Num examples: 10000 Num correct: 8949 Precision @ 1: 0.8949


http://stackoverflow.com/questions/40513466/tensorflow-retrain-py-app-run-got-unexpected-keyword-argument-argv


みたいな感じで成功です。