Deep Learning,  Python

Python:匿名函式 lambda 的一些範例 (搭配 tf.data.Dataset)

用法

lambda 輸入參數: 運算式

ie. 基本範例

add1 = lambda x: x+1
print(add1(10))  # 會印出 11

ie. 進階範例

其實只是用tensorflow.data.Dataset中,用到map這個function時,可以搭配lambda來輸入外部參數,我也不知道算不算進階XD

def parse_fn(dataset, **kwargs):
    x = dataset["image"]
    y = dataset["label"]
    x = tf.cast(x, tf.float32) / 255.0

    if len(x.shape) == 2:
        print("\nGray image, add one channel!!!")
        x = tf.expand_dims(x, axis=-1)
    else:
        if x.shape[-1] == 3:
            print("\nRGB image")
        elif  x.shape[-1] == 1:
            print("\nGray image")
    print(x.shape)

    if kwargs:
        print("Data Augmentation!!!")

        for k in kwargs.keys():
            print(" "*5, k)
            aug_fn = eval(k)
            x = tf.cond(
                tf.random.uniform((), 0, 1) > 0.5,
                lambda: aug_fn(x), lambda: x)
    else:
        print("Not Data Augmentation!!!")

    y = tf.one_hot(y, 10)
    return {"image": x}, {"label": y}

tra_ds = tra_ds.map(lambda ds: parse_fn(ds, **augdict))

結語

雖然最近不太需要用到tf.data.Dataset.map這個方式,應該說根本沒辦法用,因為公司要用舊版的tensorflow+Keras,再加上現在不需要跑很大量的資料都直接在CPU上執行,所以也不會用到tf.data.Dataset.map來讀資料,而搭配lambda來輸入外部參數是我以前的作法,只是忽然想到就紀錄起來放著,改天至少還能知道以前怎麼使用,如果可以希望有人可以告訴我更好做法。

留下一個回覆

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