機械学習の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.Sequentialclassと呼ばれるもので定義されています。

実際のコードは こちらにあります。

@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)

こちらの compilefitevaluate 関数は Sequentialのクラスコード内には記述がありません。
実際に記述されているのは Model にあります。

確認したい方は こちらを参照してください。

多重継承

基底クラスを複数宣言できるというお話です。

class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    .
    .
    .
    <statement-N>

参考

さて、あとはSequentialクラスをインスタンスしている部分(初期化)と
演算子(Exampleでは x_train / 255.0 )さえ理解すれば題目の
Exampleコードはすべて理解できたことになりますね!