機械学習のExampleから覚えるPython(class:継承)
今までPythonを感覚的に使っていたので、改めて文法を知ろうかなと。
その際にいま流行りの機械学習(深層学習)のExampleを例にすると
わかりやすいのかなと思ったので書いてみる。
※基本的には Python3.x系のつもりで記載してます
Example
https://www.tensorflow.org/tutorials/ に記載されている
import tensorflow as tf mnist = tf.keras.datasets.mnist (x_train, y_train),(x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(), tf.keras.layers.Dense(512, activation=tf.nn.relu), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation=tf.nn.softmax) ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=5) model.evaluate(x_test, y_test)
※本記事記載の時点のコードです。
class
model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(), tf.keras.layers.Dense(512, activation=tf.nn.relu), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation=tf.nn.softmax) ])
tf.keras.models.Sequential
は class
と呼ばれるもので定義されています。
実際のコードは こちらにあります。
@keras_export('keras.models.Sequential', 'keras.Sequential') class Sequential(Model):
継承
class Sequential(Model):
このSequential
クラスは Model
クラスを継承しています。
Model
を「基底クラス」、Sequential
を「派生クラス」と言ったりします。
やっていることは、シンプルで Sequential
= Model
+ Sequential独自 という形で
Model
の関数や変数を Sequential
でも使えます。
Exampleで記述している
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=5) model.evaluate(x_test, y_test)
こちらの compile
やfit
、evaluate
関数は Sequential
のクラスコード内には記述がありません。
実際に記述されているのは Model
にあります。
確認したい方は こちらを参照してください。
多重継承
基底クラスを複数宣言できるというお話です。
class DerivedClassName(Base1, Base2, Base3): <statement-1> . . . <statement-N>
参考
さて、あとはSequential
クラスをインスタンスしている部分(初期化)と
演算子(Exampleでは x_train / 255.0 )さえ理解すれば題目の
Exampleコードはすべて理解できたことになりますね!