有兩種方法初始化Model:
1. 利用函數API,從Input開始,然后后續指定前向過程,最后根據輸入和輸出來建立模型:

2. 通過構建Model的子類來實現:類似於pytorch的nn.Module:通過在__init__中定義層的實現,然后再call函數中實現前向過程:

方法:
1. compile
用於配置模型訓練

optimizer: string型優化器名,tf.keras.optimizers.
loss:string型函數名,目標函數或tf.keras.losses.Loss ,目標函數需為:scalar_loss = fn(y_true, y_pred)。如果模型有多個輸出,可以在每個outpu利用不同的損失通過傳遞一個字典或者列表loss。
metric:在訓練和測試中用到的度量方法。典型的可以用metrics=['accuracy']。對於多輸出情況可以傳遞一個字典:metrics={'output_a': 'accuracy', 'output_b': ['accuracy', 'mse']}。也可以傳遞一個列表(長度得和輸出的長度一致):metrics=[['accuracy'], ['accuracy', 'mse']] or metrics=['accuracy', ['accuracy', 'mse']].
loss_weights:可選。格式為列表或字典,來對不同損失進行加權。最終的loss將會是這些損失的加權和。
sample_weight_mode: 如果需要實現時序模式的加權,可以設為’temporal‘,默認為None。如果model有多個輸出,可以利用不同的sample_weight_mode在不同的輸出上。
weightd_metrics: 有許多評估方法metrics組成的列表,由sample_weight或者class_weight來進行加權。
target_tensors:默認情況下keras將會為模型traget創建placeholders,就是在訓練時為target位置放入數據。如果希望利用自己的target tensor,可以利用該參數。可以是單tensor(單輸出情況),也可以是tensor列表或者字典映射。
distribute:TF2不支持。
2. evaluate

x: 輸入數據,可以是numpy數組(或列表numpy表示多輸入)、可以實tf tensor(或列表tensor)、可以是字典、可以是tf.data數據集、可以是生成器或者keras.utils.Sequence實例
y:目標數據。類似x。
batch_size: 整數或None。不指定則默認為32。符號tensor,dataset,generator、 keras.utils.Sequence實例的情況下不要指定該參數。
verbose:0或1。Verbosity mode. 0 = silent, 1 = progress bar.
sample_weight: 用於在損失函數中進行加權,可選。
step:整數或None。開始評估前所需要的步數。
callbacks: keras.callbacks.Callback 列表實例。
max_queue_size: 整數,僅對於輸入是生成器或keras.utils.Sequence 時使用。生成器隊列的最大尺寸。不指明則默認為10.
workers: 整數,僅對於輸入是生成器或keras.utils.Sequence 時使用。使用基於進程的線程時要啟動的最大進程數。默認為1.
use_multiprocessing:布爾。僅對於輸入是生成器或keras.utils.Sequence 時使用。
3. fit
迭代訓練模型

前幾個參數用法同上。
validation_split:位於0-1之間的浮點數。划分一定比例的數據用於驗證。這部分數據將不會用於訓練。選取時將會采用x和y中shuffle前的最后樣本。
validation_data:模型將會在這上面進行驗證,不參與訓練。指定后將會覆蓋validation_split 參數,格式為:

class_weight: 可選。字典格式:將類索引(整數)映射到權重(浮點)值,用於加權損失函數(僅在訓練期間)。這有助於告訴模型“更加關注”來自表示不足的類的樣本。
steps_per_epoch:整數或None。周期中迭代次數。訓練數據是類似於tf的tensor時默認情況就是數據大小/批量大小。當x是tf.data時不指定該參數則周期迭代直到輸入數據被遍歷完。
validaton_steps:僅當有validation_data時有效。
validation_freq:僅當有validation_data時有效。整數則表示在進行新的驗證前需要訓練多少個epoch。validation_freq=[1, 2, 10]則表示在第1,2,10個epoch之后進行驗證。
4. get_layer

根據名字或索引來檢索一個layer。如果都提供的話,先考慮index。索引基於水平圖遍歷的順序(自下而上)。
5. load_weights

從TF或HDF5權重文件中載入權重。 如果by_name為False,則根據網絡拓朴來載入權重,這意味着網絡結構應與保存的權重一致。不包含權重的層不考慮在網絡結構中,所以添加或移除這些層不影響。如果by_name為True,僅僅有相同名字的層權重會被載入。這對於微調或者遷移模型中需要改變一些層的操作是有用的。當by_name=False時僅僅tf格式的權重是支持的。注意到從tf和HDF5中load操作有細微不同。HDF5基於展平的權重列表,而TF是基於在model中定義的層的名字。skip_mismatch為布爾,僅在by_name=True時有效:對於形狀或數目不能匹配的層進行略過。
6. predict

對輸入樣本進行預測,參數和前面基本一致。
7. predict_on_batch

對於單一的批量進行預測。x的要求和前面一樣。
8. reset_metrics和reset_states:重置metrics的狀態、重置state。
9. save

保存模型到tf或HDF5文件中。要保存的文件savefile包括:

保存的模型可以通過keras.models.load_model. 載入。有load_model返回的模型是是一個已編譯的模型,可以使用(除非保存的模型從未編譯過)。由Sequential和函數API構建的模型可以保存為HDF5和SavedModel格式。子類模型可以僅可被保存為 SavedModel格式。
參數save_format:可以為r 'tf' or 'h5', 在TF2中默認為tf,TF1中默認為h5.
signature僅在’tf‘格式中可用。

10. save_weights

保存所有層的權重,save_format可以指定村委HDF5或TF格式。 當村委HDF5格式時,權重文件需要有:

存為TF格式時,網絡引用的所有對象都以與tf.train.Checkpoint相同的格式保存,包括分配給對象屬性的任何層實例或優化器實例。對於使用tf.keras.Model(inputs,outputs)構建的網絡,網絡使用的層實例將被自動跟蹤/保存。對於從tf.keras.Model繼承的用戶定義類,必須將層實例分配給對象屬性,通常在構造函數中。詳見tf.train.Checkpoint和tf.keras.Model文檔。
雖然格式相同,但不要混合使用save_weights和tf.train.Checkpoint。Model.save_weights保存的檢查點應使用Model.load_weights加載。使用tf.train.Checkpoint.save保存的檢查點應使用相應的tf.train.Checkpoint.restore還原。
TensorFlow格式從根對象開始匹配對象和變量,self表示save_weights,貪婪地匹配屬性名。對於Model.save是模型,對於Checkpoint.save是檢查點,即使檢查點附加了模型。這意味着,使用save_weights保存tf.keras.Model並加載到tf.train.Checkpoint中,同時附加一個模型(反之亦然),將與模型的變量不匹配。有關TensorFlow格式的詳細信息,請參閱guide to training checkpoints。
11. summary

打印網絡信息。positions:每行日志元素的相對或絕對位置。如果未提供,則默認為[.33、.55、.67、1.]。
12. test_on_batch

如果reset_metrics=True,則metrics僅在該批量中返回。False則將度量將有狀態地根據批量累積。
13. to_json和to_yaml
返回不同格式的網絡信息。可以分別利用 keras.models.model_from_yaml(yaml_string, custom_objects{}).、 keras.models.model_from_json(json_string, custom_objects={})來載入網絡中。
14. train_on_batch

在單一批量數據上進行單次梯度更新。返回訓練loss。
tf.keras.Sequential

方法基本和Model一樣。

