最近、一度挫折したPythonでの機械学習を再チャレンジしている私。
Python学習で嫌でも目にする説明文。
「~のモジュールを用います。」
「このメソッドの役割は~」
どういう機能を持つものなのか何となく理解できているが、モジュールの中にどんな要素が含まれているんだっけ?等の関係性があいまいなままです。。
今回は、Pythonで出てくる”クラス”、”モジュール”、”メソッド” 等の違いを分かりやすくまとめたので、説明したいと思います。
各用語とともに、ニューラルネットワークで用いられるtensorflowやkeras等がどの用語に当てはまるのかを、プログラムの一部分を示しながら説明します。
説明順序の都合から実際にプログラムを実装していく順序が異なっていますので、ご注意ください。
ライブラリ、パッケージ、モジュール
まず、各用語の関係性を分かりやすく図にしてみました。
まず、 モジュール < パッケージ < ライブラリ という関係性が分かります。モジュールの中にはメソッドを含む関数と関数があります。まず、ライブラリ、パッケージ、モジュールについて確認していきましょう。
モジュール(module)
”モジュール”は私たちが普段作成するPythonのプログラムコードと同じ ”.py形式ファイル” で保存されています。モジュールには複数の関数やクラスなどのデータ処理を行うプログラムが含まれています。他のプログラムからモジュールを呼び出し、利用することが可能です。
モジュールを”import”することで、中の関数やクラスを利用できます。
keras や models がtensorflowのモジュールに当たります。tensorflowをimportした後にkerasをimportします。
import keras
from tensorflow.keras import models
パッケージ(Package)
”パッケージ”は複数のモジュールを1つにまとめたフォルダになります。
パッケージの中には、モジュール と “_init_.py”というパッケージの初期化処理を行うファイルが含まれます。
パッケージにより、モジュール1つ1つをimportする手間が省けます。
tensorflow自体がパッケージを指します。
import tensorflow as tf
ライブラリ(library)
”ライブラリ”の定義はあいまいです。
複数のパッケージを1つにまとめたフォルダ。
または、モジュールやパッケージのこともライブラリと呼ぶことがあります。このため、私はモジュールとライブラリの違いが分からず、混乱してしまいました。(笑)
実際に、tensorflowやkerasもライブラリと呼ばれています。
関数、クラス、メソッド
ここでは、モジュールの中身を説明します。モジュールの中には、”関数”と”クラス”が含まれています。
関数(function)
”関数”はどんなデータ処理をするか定義したものです。
データから平均値を求める関数を作ることができれば、平均値+5以上の数値はいくつ含まれるかを求める関数を作ることができます。
つまり、具体的な命令内容です。
クラス(class)、メソッド(methods)
”メソッド”は”クラス”内に含まれる関数のことです。
クラスは複数の関連のあるメソッド(関数)を一つにまとめたものです。
メソッドが関数と大きく異なる点として、メソッドを用いるには”インスタンス化”という手続きが必要があります。
インスタンス化が何か次節で説明します。
Sequential が tensorflowでのクラスを指します。
model = models.Sequential([
layers.Dense(units=10, activation='relu', input_shape=(10,)),
layers.Dense(units=3, activation='softmax')
])
.compile() や .predict() がメソッドに当たります。
model.compile(optimizer='sgd',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
loaded_model.predict(sample)
インスタンス(instance)
メソッドを用いる前に、まずクラスを呼び出し変数へ代入します。
自身で新しく用意した変数 = クラス(引数)
この新しく用意した変数が、クラスから作成された”インスタンス”と呼ばれています。
前説のmodelがインスタンスです。
このインスタンスを用いて、クラス内にいたメソッドを呼び出してデータ処理をしてもらうことができるようになります。
上記の.compile() や .predict() のようにインスタンスとメソッドを ” . ” で結ぶことで、メソッドを呼び出せます
インスタンス化は抽象的な概念であるクラスを、具体的な実物であるインスタンスへと変更し処理することと言われてます。
僕なりの大雑把な解釈で分かりやすく説明します。ある計算処理クラスの中には「最大値の求め方」や「平均の求め方」等といった処理手順があります。
手順が記されたものだけでは、データから最大値の結果を得ることができません。
ここでインスタンス化することによって、計算処理クラスの手順に沿って計算をする計算機という実物を作成します。
最後に最大値を求めるメソッドを呼び出すことで、データから今回は何を求めたいか指示をしています。
長くなりましたが、以上がインスタンスの説明になります。
まとめ
今回は、クラス、モジュール、メソッド等の違いについてまとめてみました。Pythonを学んでいくと、フォルダの意味をするいろんな用語が出てくるのでややこしくなり苦手意識を持つようになります。
ライブラリ、パッケージ、モジュール、クラスはフォルダやファイルの役割をしています。
メソッドや関数は実際の処理が書かれています。
去年、私はニューラルネットワークを勉強していました。しかし、序盤でクラスやインスタンスの仕組みが全くわからずに挫折して、本を閉じて数ヶ月勉強を放置してしまいました(笑)
コツとしては分かりやすい解説を見つけることでなく、とりあえず真似したプログラムを実行することを繰り返すことだと思います。
今回、ただ言葉だらけの解説ですが色々プログラム回してみた後の復習になればと思っています。
コメント