TensorFlow 2.0 建立Model 的三個方法

以下三個方法都使用同樣的model數量及階層,但會使用不同的方法撰寫。

方法1 初階使用方法,適合只使用一次的狀況,這樣子做既快又有效率

# 直接定義model 層數及類型
model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(img_height, img_width, 1)),
    tf.keras.layers.Dense(128, activation='relu'),

    tf.keras.layers.Dense(3, activation='softmax')
])

方法2 建立一個python function,這就有機會在不直接修改model下,修改他的input數目以及全連階層的數目,需要開放甚麼接口可以自己在新增。


def model_setting(rows, cols, channel, dense1, dense2):
    model = tf.keras.models.Sequential([
        tf.keras.layers.Flatten(input_shape=(rows, cols, channel)),
        tf.keras.layers.Dense(dense1, activation='relu'),
        # tf.keras.layers.Dropout(0.05),
        tf.keras.layers.Dense(dense2, activation='softmax')
    ])
    return model

方法3 建立一個class 定義自己的model,跟方法二雷同

我覺得方法3的好處是可以快速切換model模型,只要我的model指向不同模型的塊就可以完成了,所以這些model可以多多建立起來,以便後面操作使用。

class SimpleDenseModel(tf.keras.Model):

    def __init__(self, rows=10, cols=10, channels=3, class_count=3, name="Simple_Dense_Model", **kwargs):
        super(SimpleDenseModel, self).__init__(name=name, **kwargs)
        self.flatten = tf.keras.layers.Flatten(input_shape=(rows, cols, channels))
        self.dense1 = tf.keras.layers.Dense(128, activation='relu')
        self.dense2 = tf.keras.layers.Dense(class_count, activation='softmax')

    def call(self, inputs):
        x = self.flatten(inputs)
        x = self.dense1(x)
        return self.dense2(x)

方法三在使用上,會發現跟方法一、方法二有差異,首先是在呼叫summary的部分,方法一、二都可以直接建立完model後直接使用summary看看層數,但方法三無法,需要先呼叫過build或是fit函式後,才可以呼叫,詳細可以參考下面這篇。自行build的library與原生model的差異

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *