1. 程式人生 > 實用技巧 >tensorflow2.0——keras相關介面簡化訓練程式碼

tensorflow2.0——keras相關介面簡化訓練程式碼

注意:

1.  圖片程式碼中的network變數在後面的程式碼展示中是model變數

2.  該列子中db中的y是one_hot編碼後的

原始碼(一個step中的一個batch):

  

介面替換後:

  

原來的for迴圈每個step與batch:

  

介面替換後:

  

此處還沒有設定測試的週期(比如前面的step %100 == 0)

簡單結果圖:

  

--------------------------------------------------------------------------------

原來的測試程式碼:

  

現在的測試介面:

  

validation_steps = 2 表示每兩個epoch展示測試結果一次

列印展示:

  

訓練完成後再做一次測試(引數為資料集):

  

輸出:

  

import tensorflow as tf

def preporocess(x,y):
    x = tf.cast(x,dtype=tf.float32) / 255
    x = tf.reshape(x,(-1,28 *28))                   #   鋪平
    x = tf.squeeze(x,axis=0)
    # print('裡面x.shape:',x.shape)
    y = tf.cast(y,dtype=tf.int32)
    y = tf.one_hot(y,depth=10)
    
return x,y def main(): # 載入手寫數字資料 mnist = tf.keras.datasets.mnist (train_x, train_y), (test_x, test_y) = mnist.load_data() # 處理資料 # 訓練資料 db = tf.data.Dataset.from_tensor_slices((train_x, train_y)) # 將x,y分成一一對應的元組 db = db.map(preporocess) # 執行預處理函式 db = db.shuffle(60000).batch(2000) #
打亂加分組 # 測試資料 db_test = tf.data.Dataset.from_tensor_slices((test_x, test_y)) db_test = db_test.map(preporocess) db_test = db_test.shuffle(10000).batch(10000) # 設定超參 iter_num = 2000 # 迭代次數 lr = 0.01 # 學習率 # 定義模型器和優化器 model = tf.keras.Sequential([ tf.keras.layers.Dense(256, activation='relu'), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dense(32, activation='relu'), tf.keras.layers.Dense(10) ]) # 優化器 # optimizer = tf.keras.optimizers.SGD(learning_rate=lr) optimizer = tf.keras.optimizers.Adam(learning_rate=lr) # 定義優化器 model.compile(optimizer= optimizer,loss=tf.losses.CategoricalCrossentropy(from_logits=True),metrics=['accuracy']) # 定義模型配置 model.fit(db,epochs=10,validation_data=db,validation_steps=2) # 執行模型,引數validation_data是指在哪個測試集上進行測試 model.evaluate(db_test) # 最後列印測試資料相關準確率資料 if __name__ == '__main__': main()