tensorflow2.0 基本流程學習筆記

定義模型

# 銷燬當前的TF圖並創建一個新圖。
# 有助於避免舊模型/圖層混亂。
tf.keras.backend.clear_session()
model = models.Sequential()

model.add(layers.Dense(20, batch_input_shape=(None, 15)))
##等價--1
#model.add(layers.Dense(20,activation = 'relu', input_dim=15 ))
##等價--2:Optionally, the first layer can receive an `input_shape` argument:
#model.add(layers.Dense(20,activation = 'relu',input_shape=(15,))) ## 15 dimension

model.add(layers.Dense(10,activation = 'relu' ))
model.add(layers.Dense(1,activation = 'sigmoid' ))
model.summary()
### 如果沒有 input_shape ,則沒有 weights,會打印 ValueError
model = models.Sequential()
model.add(layers.Dense(32))
model.add(layers.Dense(32))
# model.weights  # returns []
model = models.Sequential()
model.add(layers.Dense(32))
# model.build((None, 5))
## 等價 --1, 但是dim 等於 32(疑問?)
model.build(input_shape=(None,3))
model.weights

訓練

# 二分類問題選擇二元交叉熵損失函數
model.compile(optimizer='adam', ## 優化函數
            loss='binary_crossentropy', ## 損失函數
            metrics=['AUC']) ## 評估函數

history = model.fit(x_train,y_train,
                    batch_size= 64,  ## 每次喂到模型的數據行
                    epochs= 30, ## 訓練的輪數
                    validation_split=0.2 #分割一部分訓練數據用於驗證
                   )
test_scores = model.evaluate(x_train, y_train, verbose=2)
print('Test loss:', test_scores[0])
print('Test accuracy:', test_scores[1])

評估

### 評估
import matplotlib.pyplot as plt
def plot_metric(history, metric):
    train_metrics = history.history[metric]
    val_metrics = history.history['val_'+metric]
    epochs = range(1, len(train_metrics) + 1)
    plt.plot(epochs, train_metrics, 'bo--')
    plt.plot(epochs, val_metrics, 'ro-')
    plt.title('Training and validation '+ metric)
    plt.xlabel("Epochs")
    plt.ylabel(metric)
    plt.legend(["train_"+metric, 'val_'+metric])
    plt.show()
    
 plot_metric(history,"AUC")

模型保存

## 方法一

# 保存模型結構及權重
model.save('./data/keras_model.h5')  
del model  #刪除現有模型
# identical to the previous one
model = models.load_model('./data/keras_model.h5')


方法二
# 保存模型結構
json_str = model.to_json()
#保存模型權重
model.save_weights('./data/keras_model_weight.h5')
# 恢復模型結構
model_json = models.model_from_json(json_str)
model_json.compile(
        optimizer='adam',
        loss='binary_crossentropy',
        metrics=['AUC']
    )

# 加載權重
model_json.load_weights('./data/keras_model_weight.h5')


方法三
# 保存模型結構與模型參數到文件,該方式保存的模型具有跨平臺性便於部署
model.save('./data/tf_model_savedmodel', save_format="tf")
print('export saved model.')
model_loaded = tf.keras.models.load_model('./data/tf_model_savedmodel')

教程鏈接 eat_tensorflow2_in_30_days

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章