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來輸入外部參數是我以前的作法,只是忽然想到就紀錄起來放著,改天至少還能知道以前怎麼使用,如果可以希望有人可以告訴我更好做法。