定義模型
# 銷燬當前的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