自分のための備忘録的なブログです。

Ubuntu14.04LTS を使って、ディープラーニングの勉強をしています。
記載されているコードは、他の OS には互換性がない可能性があります。


DNN:
マシン性能別 学習速度の比較, TFチュートリアルをmodifyする

python3:
オブジェクト指向プログラミングとは, モジュールとインポート、パスを通す, システムコマンド(os), ファイル・フォルダ名取得, 画像の前処理,

Ubuntu14 の初期設定:
Ubuntu14初期設定, 初期設定-2, cudaなども, 初期設定-3

Python3 モジュールのインポート, パスを通す

 

前書き

ディープラーニングで欠かせない「モジュールのインポート」

 

import tensorflow as tf 

 

import numpy as np

import chainer

import chainer.functions as F

import chainer.links as L

from chainer import Variable,optimizers,Chain 

 

みたいなやつ。

分からなかったので勉強した。

 

 

モジュールとは

ざっくり言うと

関数やクラスを含んでいる「.py」ファイル 

 

または、

 

関数やクラスを含んだ「.py」ファイルのある、ディレクトリー

のこと

 

モジュールのインポートとは

 

ざっくり言うと

インポート元に含まれる、

  関数

  クラス

を取り込んで、使えるようにする

 こと。

 

試してみる。

すべてのクラスと関数をインポートする。

import chainer

のような

関数を呼び出す際、

chainer.(関数の名前)

のように、前に「モジュール名.」をくっつける。

 

別名によるインポート

import tensorflow as tf

のような。

 

関数を呼び出す際、

tf.(関数の名前)

で良い。

 

tensorflow.(関数の名前)

と長く書く必要がなく、タイピングの手間が省ける。

ただし、自分でオリジナルの省略形を使い始めてしまうと、収拾がつかなくなる(再利用しにくくなる)。広く使われている省略形のみにとどめるのが無難。

 

一部の関数やクラスだけをインポートする

from chainer import Variable,optimizers,Chain

のようなの。

 

この方法だと、それぞれの関数の前に

chainer.

をつけなくても Variable, optimizers, Chain 

が使えるようになるので、コードが書きやすくなる。

 

クラス/関数の名前の衝突(同じ名前を使ってしまったため、一部のクラス・関数が使えなくなる)に気をつける必要がある。

 

パッケージを使う

from chainer import Variable,optimizers,Chain

みたいな。

(このコードは、一部のクラス・関数のインポートであり、かつパッケージの利用でもある?)

 

実際には

chainer

 

フォルダーの下に、

Variable.py

optimizers.py

Chain.py

__init__.py

などが位置する 形、らしい。間違ってたらすみません。勉強中でして。

 

パッケージを利用する際には、

__init__.py

ファイルが必要とのこと(中身は空で良い)。

 

optimizers.setup()

optimizersMomentumSGD()

みたいに、ドットをつけて関数・クラスを引用する。

 

なぜパッケージを使うのか

複数のモジュールで、名前の衝突を防ぐことができる。

たとえば 2つのモジュール内に同じ関数が含まれていたとしても、関数の前にモジュールの名前がつくので(optimizers.setup()のように)、別の関数として認識できる。

 

 

モジュール検索パス

import sys

for _path_ in sys.path: 

    print(_path_)

 

モジュールを検索してくる場所が表示される。

よくある

パスを通す

っていうやつ。

sys.path

をエディターとかで書き直すと、変更できるらしい。

 

一番最初に「空の行」がでるのは、('.') すなわち current directory を示している。

 

一番最初に「ビルトインモジュール」を探すらしい。

見つからなかった場合、上からディレクトリーを検索して .py ファイル(やフォルダー)を探していき、もしモジュール(.py ファイルや、フォルダー)が見つかった場合、以降の ディレクトリは検索されない。

例えば、カレントディレクトリに「tensorflow」というモジュールを、自分で作って置いて置くとする。そこで tensorflow をインポートすると、自分の作った「tensorflow」モジュールがインポートされ、本来の tensorflow はインポートされない。

モジュールの名付けに注意が必要。

 

シンボリックリンクを含むディレクトリはモジュール検索パスに追加されない。

らしいので注意。

 

モジュールのある場所

モジュール置き場は自分で決めておけば良いと思うのだけど、

Anaconda on Windows の場合、

C:\Users\[User name]\Anaconda3\Lib\site-pakages\

に入っているみたい。

 

Ubuntu14.04 では 仮想環境を使っていて。

~\anaconda3\envs\py27\lib\python2.7\site-packages\
~\anaconda3\envs\py35\lib\python3.5\site-packages\
~\anaconda3\envs\py36\lib\python3.6\site-packages\

に入っていた。

 

 

ソース

 6. モジュール (module) — Python 3.6.1 ドキュメント

 初心者が悩む

if __name__ = "__main__":

 についても書いてある。