發布時間: 2019-07-09 14:02:31
tensorflow2推薦使用keras構建網絡,常見的神經網絡都包含在keras.layer中(最新的tf.keras的版本可能和keras不同)
tf.k?eras是 Kera?s API 在TensorFlow 里的實現。這是一個高級API,用于構建和訓練模型,同時兼容 TensorFlow 的絕大部分功能,比如,eager exec?ution, tf.?data模塊及 Esti?mators。 tf.ke?ras使得 TensorFlow 更容易使用,且保持 TF 的靈活性和性能。
首先需要在您的代碼開始時導入tf.keras:
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__) |
tf.keras可以運行任何與Keras兼容的代碼,但請記?。?/span>
最新TensorFlow版本中的tf.keras版本可能與PyPI的最新keras版本不同。 檢查tf.keras.version。
保存模型的權重時,tf.keras默認為 checkp?oint 格式。 通過save_format ='h5'使用HDF5。
最常見的模型類型是層的堆疊:keras.Sequential 模型
在Keras中,您可以組裝圖層來構建模型。 模型(通常)是圖層圖。 最常見的模型類型是一堆層:tf.keras.S?equential 模型。構建一個簡單的全連接網絡(即多層感知器):
# 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)。 # Dropout參數解釋: # inputs:必須,即輸入數據。 # rate:可選,默認為 0.5,即 dropout rate,如設置為 0.1,則意味著會丟棄 10% 的神經元。 # noise_shape:可選,默認為 None,int32 類型的一維 Tensor,它代表了 dropout mask 的 shape,dropout mask 會與 inputs 相乘對 inputs 做轉換,例如 inputs 的 shape 為 (batch_size, timesteps, features),但我們想要 droput - - mask 在所有 timesteps 都是相同的,我們可以設置 noise_shape=[batch_size, 1, features]。 # seed:可選,默認為 None,即產生隨機熟的種子值。 # training:可選,默認為 False,布爾類型,即代表了是否標志位 training 模式。 # name:可選,默認為 None,dropout 層的名稱。 model = keras.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) |
tf.keras.layers中網絡配置:
activation:設置層的激活函數。此參數由內置函數的名稱指定,或指定為可調用對象。默認情況下,系統不會應用任何激活函數。
kernel_initializer 和 bias_initializer:創建層權重(核和偏差)的初始化方案。此參數是一個名稱或可調用對象,默認為 “Glorot uniform” 初始化器。
kernel_regularizer 和 bias_regularizer:應用層權重(核和偏差)的正則化方案,例如 L1 或 L2 正則化。默認情況下,系統不會應用正則化函數。
keras.layers.Dense(32, activation='sigmoid') keras.layers.Dense(32, activation=tf.sigmoid) keras.layers.Dense(32, kernel_initializer='orthogonal') keras.layers.Dense(32, kernel_initializer=tf.keras.initializers.glorot_normal) keras.layers.Dense(32, kernel_regularizer=tf.keras.regularizers.l2(0.01)) keras.layers.Dense(32, kernel_regularizer=tf.keras.regularizers.l1(0.01)) |
構建模型后,通過調用compile方法配置其訓練過程:
# compile函數:在模型準備好進行培訓之前,它需要更多設置。這些是在模型的編譯步驟中添加的: # # 損失函數 - 這可以衡量模型在訓練過程中的準確程度。我們希望最小化此功能,以便在正確的方向上“引導”模型。 # 優化器 - 這是基于它看到的數據及其損失函數更新模型的方式。 # 度量標準 - 用于監控培訓和測試步驟。以下示例使用精度,即正確分類的圖像的分數。 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) |
compile有三個重要參數:
· optimizer:訓練過程的優化方法。此參數通過 tf.t?rain 模塊的優化方法的實例來指定,比如:AdamOpt?imizer, RMSPropOptim?izer, GradientDescentOptimizer。
· loss:訓練過程中使用的損失函數(通過最小化損失函數來訓練模型)。 常見的選擇包括:均方誤差(mse),categorical_crossentropy和binary_crossentropy。 損失函數由名稱或通過從tf.keras.losses模塊傳遞可調用對象來指定。
· metrics:訓練過程中,監測的指標(Used to monitor training)。
指定方法:名稱 或 可調用對象 from the tf.keras?.metrics 模塊。
以下顯示了配置培訓模型的幾個示例:
# Configure a model for mean-squared error regression.
model.compile(optimizer=tf.train.AdamOptimizer(0.01),
loss='mse', # mean squared error
metrics=['mae']) # mean absolute error
# Configure a model for categorical classification.
model.compile(optimizer=tf.train.RMSPropOptimizer(0.01),
loss=keras.losses.categorical_crossentropy,
metrics=[keras.metrics.categorical_accuracy])
keras model.compile(loss='目標函數 ', optimize?r='adam', metrics=['accuracy'])
目標函數,或稱損失函數,是網絡中的性能函數,也是編譯一個模型必須的兩個參數之一。由于損失函數種類眾多,下面以keras官網手冊的為例。
在官方keras.io里面,有如下資料:
· mean_squared_error或mse
· mean_absolute_error或mae
· mean_absolute_percentage_error或mape
· mean_squared_logarithmic_error或msle
· squared_hinge
· hinge
· binary_crossentropy(亦稱作對數損失,logloss)
· categorical_crossentropy:亦稱作多類的對數損失,注意使用該目標函數時,需要將標簽轉化為形如(nb_samples, nb_classes)的二值序列
· sparse_categorical_crossentrop:如上,但接受稀疏標簽。注意,使用該函數時仍然需要你的標簽與輸出值的維度相同,你可能需要在標簽數據上增加一個維度:np.expand_dims(y,-1)
· kullback_leibler_divergence:從預測值概率分布Q到真值概率分布P的信息增益,用以度量兩個分布的差異.
· cosine_proximity:即預測值與真實標簽的余弦距離平均值的相反數
tf.keras.Model.e?valuate 和 tf.keras.Model.predict 方法能夠使用 NumPy 數據 和 tf.da?ta.Dataset 數據。要評估所提供數據的推理模式損失和指標,并且作為NumPy數組,預測所提供數據的推斷中最后一層的輸出:
#訓練和評估模型: model.fit(x_train, y_train, epochs=5) test_loss, test_acc = model.evaluate(x_test,y_test) print('Test accuracy:', test_acc) predictions = model.predict(x_test) print("==================") print(predictions) |
from __future__ import absolute_import, division, print_function, unicode_literals 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 #加載并準備MNIST數據集,將樣本從整數轉換為浮點數 mnist = keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() #將數據歸一化,在訓練網絡之前,必須對數據進行預處理。如果您檢查訓練集中的第一個圖像,您將看到像素值落在0到255的范圍內 # 在饋送到神經網絡模型之前,我們將這些值縮放到0到1的范圍。為此,將圖像組件的數據類型從整數轉換為float,并除以255.0。 x_train, x_test = x_train / 255.0, x_test / 255.0 #通過堆疊圖層構建tf.keras.Sequential模型。選擇用于訓練的優化器和損失函數: # 該網絡中的第一層tf.keras.layers.Flatten將圖像的格式從2d陣列(28乘28像素)轉換為28 * 28 = 784像素的1d陣列??梢詫⒋藞D層視為圖像中未堆疊的像素行并將其排列。該層沒有要學習的參數; 它只重新格式化數據。 # 在像素被展平之后,網絡由tf.keras.layers.Dense兩層序列組成。這些是密集連接或完全連接的神經層。第一Dense層有128個節點(或神經元)。第二(和最后)層是10節點softmax層 - 這返回10個概率分數的數組,其總和為1.每個節點包含指示當前圖像屬于10個類之一的概率的分數。 # 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)。 # Dropout參數解釋: # inputs:必須,即輸入數據。 # rate:可選,默認為 0.5,即 dropout rate,如設置為 0.1,則意味著會丟棄 10% 的神經元。 # noise_shape:可選,默認為 None,int32 類型的一維 Tensor,它代表了 dropout mask 的 shape,dropout mask 會與 inputs 相乘對 inputs 做轉換,例如 inputs 的 shape 為 (batch_size, timesteps, features),但我們想要 droput - - mask 在所有 timesteps 都是相同的,我們可以設置 noise_shape=[batch_size, 1, features]。 # seed:可選,默認為 None,即產生隨機熟的種子值。 # training:可選,默認為 False,布爾類型,即代表了是否標志位 training 模式。 # name:可選,默認為 None,dropout 層的名稱。 model = keras.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) # compile函數:在模型準備好進行培訓之前,它需要更多設置。這些是在模型的編譯步驟中添加的: # # 損失函數 - 這可以衡量模型在訓練過程中的準確程度。我們希望最小化此功能,以便在正確的方向上“引導”模型。 # 優化器 - 這是基于它看到的數據及其損失函數更新模型的方式。 # 度量標準 - 用于監控培訓和測試步驟。以下示例使用精度,即正確分類的圖像的分數。 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) #訓練和評估模型: model.fit(x_train, y_train, epochs=5) test_loss, test_acc = model.evaluate(x_test,y_test) print('Test accuracy:', test_acc) predictions = model.predict(x_test) print("==================") print(predictions) |
本實驗利用網上已有的北京房價數據集預測了北京的房價,實現了TensorFlow的線性回歸應用。
下一篇: 騰科華為培訓課程之組播詳解