1.keras概述
Keras是一個由Python編寫的開源人工神經網絡庫,可以作為Tensorflow、Microsoft-CNTK和Theano的高階應用程序接口,進行深度學習模型的設計、調試、評估、應用和可視化
Keras在代碼結構上由面向對象方法編寫,完全模塊化并具有可擴展性,其運行機制和說明文檔有將用戶體驗和使用難度納入考慮,并試圖簡化復雜算法的實現難度 。Keras支持現代人工智能領域的主流算法,包括前饋結構和遞歸結構的神經網絡,也可以通過封裝參與構建統計學習模型。在硬件和開發環境方面,Keras支持多操作系統下的多GPU并行計算,可以根據后臺設置轉化為Tensorflow、Microsoft-CNTK等系統下的組件。
Keras的主要開發者是谷歌工程師Francois Chollet,此外其GitHub項目頁面包含6名主要維護者和超過800名直接貢獻者 。Keras在其正式版本公開后,除部分預編譯模型外,按MIT許可證開放源代碼。
2.keras優勢
Keras 是一個用于構建和訓練深度學習模型的高階 API。它可用于快速設計原型、高級研究和生產,具有以下三個主要優勢:
方便用戶使用
Keras 具有針對常見用例做出優化的簡單而一致的界面。它可針對用戶錯誤提供切實可行的清晰反饋。
模塊化和可組合
將可配置的構造塊連接在一起就可以構建 Keras 模型,并且幾乎不受限制。
易于擴展
可以編寫自定義構造塊以表達新的研究創意,并且可以創建新層、損失函數并開發先進的模型。
3.Keras常用接口
tf.keras:
Datasets
Estimator
Layers
? Losses
? Metrics
? Preprocessing
? Optimizers
3.1.tf.keras.datasets
keras中內置的數據集,例如:boston_housing, mnist, cifar10。
3.2.tf.keras.estimator:
一種極大地簡化機器學習編程的高階TensorFlow API,Estimator會封裝的操作有:訓練、評估、預測、導出。主要功能是model_to_estimator: Estimator根據給定的Keras模型構造一個實例:
tf.keras.estimator.model_to_estimator()
3.3.tf.keras.layers
網絡層封裝了變量和作用其上的操作。比如(全連接層)對輸入進行一個加權求和的操作,并且可以作用一個可選擇的激活函數。連接的權重和偏置都由網絡層對象來管理。
3.4.tf.keras.losses
內置損耗功能。包括計算標簽與預測之間的二進制交叉熵損失、誤差平方的損失、絕對百分比誤差等等。
3.5.tf.keras.metrics
內置指標。主要包括的類有方法有:mean, Accuracy, Recall等。
keras數據預處理工具。
3.7.tf.keras.optimizers
內置優化器類。 包含Adam, Adadelta, SGD等優化器類。
4.快速入門?
import tensorflow as tf
#tensorflow2.0 使用keras一般通過tensorflow.keras來使用,但是pycharm沒有提示,原因是因為實際的keras路徑放在tensorflow/python/keras,但是在程序中tensorflow有沒有python這個目錄,解決方法如下
try:
import tensorflow.keras as keras
except:
import tensorflow.python.keras as keras
#這樣pycharm既可以有提示,同時也不需要在程序運行的時候修改代碼了。非常完美的解決手段,當然如果你不適用ide就不需要這些東西了。
# print(tf.__version__)
# print(keras.__version__)
import numpy as np
# 在Keras中,您可以組裝圖層來構建模型。 模型(通常)是圖層圖。 最常見的模型類型是一堆層:tf.keras.Sequential 模型。構建一個簡單的全連接網絡(即多層感知器):
#構建好模型后,通過調用 compile 方法配置該模型的學習流程:
model = keras.Sequential()
# Dense函數參數
# units: 正整數,輸出空間維度。
# activation: 激活函數 (詳見 activations)。 若不指定,則不使用激活函數 (即,「線性」激活: a(x) = x)。
# use_bias: 布爾值,該層是否使用偏置向量。
# kernel_initializer: kernel 權值矩陣的初始化器 (詳見 initializers)。
# bias_initializer: 偏置向量的初始化器 (see initializers).
# kernel_regularizer: 運用到 kernel 權值矩陣的正則化函數 (詳見 regularizer)。
# bias_regularizer: 運用到偏置向的的正則化函數 (詳見 regularizer)。
# activity_regularizer: 運用到層的輸出的正則化函數 (它的 "activation")。 (詳見 regularizer)。
# kernel_constraint: 運用到 kernel 權值矩陣的約束函數 (詳見 constraints)。
# bias_constraint: 運用到偏置向量的約束函數 (詳見 constraints)。
model.add(keras.layers.Dense(32, activation='relu'))
model.add(keras.layers.Dense(32, activation='relu'))
model.add(keras.layers.Dense(10, activation='softmax'))
model.compile(optimizer=keras.optimizers.Adam(0.001),
loss=keras.losses.categorical_crossentropy,
metrics=[keras.metrics.categorical_accuracy])
#輸入numpy數據
# 對于小的數據集,可以直接使用 NumPy 格式的數據進行訓練、評估模型。模型使用 fit 方法訓練數據:
# tf.keras.Model.fit 有三個重要的參數:
# ? epochs:訓練多少輪。(小批量)
# ? batch_size:當傳遞NumPy數據時,模型將數據分成較小的批次,并在訓練期間迭代這些批次。 此整數指定每個批次的大小。 請注意,如果樣本總數不能被批量大小整除,則最后一批可能會更小。
# ? validation_data:在對模型進行原型設計時,您希望輕松監控其在某些驗證數據上的性能。 傳遞這個參數 - 輸入和標簽的元組 - 允許模型在每個epoch的末尾以傳遞數據的推理模式顯示損失和度量。
train_x = np.random.random((1000, 72))
train_y = np.random.random((1000, 10))
val_x = np.random.random((200, 72))
val_y = np.random.random((200, 10))
model.fit(train_x, train_y, epochs=10, batch_size=100,validation_data=(val_x, val_y))
print(train_x)
print(train_y)
#tf.data輸入數據
# 使用數據集API可擴展到大型數據集或多設備培訓。 將tf.data.Dataset實例傳遞給fit方法。使用 Datasets API 可擴展到大型數據集或多設備訓練
dataset = tf.data.Dataset.from_tensor_slices((train_x, train_y))
dataset = dataset.batch(32)
dataset = dataset.repeat()
val_dataset = tf.data.Dataset.from_tensor_slices((val_x, val_y))
val_dataset = val_dataset.batch(32)
val_dataset = val_dataset.repeat()
model.fit(dataset, epochs=10, steps_per_epoch=30,
validation_data=val_dataset, validation_steps=3)
#評估與預測
test_x = np.random.random((1000, 72))
test_y = np.random.random((1000, 10))
model.evaluate(test_x, test_y, batch_size=32)
test_data = tf.data.Dataset.from_tensor_slices((test_x, test_y))
test_data = test_data.batch(32).repeat()
model.evaluate(test_data, steps=30)
# predict
result = model.predict(test_x, batch_size=32)
print(result)
?