# 销毁当前的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