全部課程
發(fā)布時(shí)間: 2019-07-09 14:02:31

tensorflow2推薦使用keras構(gòu)建網(wǎng)絡(luò),常見(jiàn)的神經(jīng)網(wǎng)絡(luò)都包含在keras.layer中(最新的tf.keras的版本可能和keras不同)
tf.k?eras是 Kera?s API 在TensorFlow 里的實(shí)現(xiàn)。這是一個(gè)高級(jí)API,用于構(gòu)建和訓(xùn)練模型,同時(shí)兼容 TensorFlow 的絕大部分功能,比如,eager exec?ution, tf.?data模塊及 Esti?mators。 tf.ke?ras使得 TensorFlow 更容易使用,且保持 TF 的靈活性和性能。
首先需要在您的代碼開(kāi)始時(shí)導(dǎo)入tf.keras:
import tensorflow as tf #tensorflow2.0 使用keras一般通過(guò)tensorflow.keras來(lái)使用,但是pycharm沒(méi)有提示,原因是因?yàn)閷?shí)際的keras路徑放在tensorflow/python/keras,但是在程序中tensorflow有沒(méi)有python這個(gè)目錄,解決方法如下 try: import tensorflow.keras as keras except: import tensorflow.python.keras as keras #這樣pycharm既可以有提示,同時(shí)也不需要在程序運(yùn)行的時(shí)候修改代碼了。非常完美的解決手段,當(dāng)然如果你不適用ide就不需要這些東西了。 print(tf.__version__) print(keras.__version__) |
tf.keras可以運(yùn)行任何與Keras兼容的代碼,但請(qǐng)記住:
最新TensorFlow版本中的tf.keras版本可能與PyPI的最新keras版本不同。 檢查tf.keras.version。
保存模型的權(quán)重時(shí),tf.keras默認(rèn)為 checkp?oint 格式。 通過(guò)save_format ='h5'使用HDF5。
最常見(jiàn)的模型類型是層的堆疊:keras.Sequential 模型
在Keras中,您可以組裝圖層來(lái)構(gòu)建模型。 模型(通常)是圖層圖。 最常見(jiàn)的模型類型是一堆層:tf.keras.S?equential 模型。構(gòu)建一個(gè)簡(jiǎn)單的全連接網(wǎng)絡(luò)(即多層感知器):
# Dense函數(shù)參數(shù) # units: 正整數(shù),輸出空間維度。 # activation: 激活函數(shù) (詳見(jiàn) activations)。 若不指定,則不使用激活函數(shù) (即,「線性」激活: a(x) = x)。 # use_bias: 布爾值,該層是否使用偏置向量。 # kernel_initializer: kernel 權(quán)值矩陣的初始化器 (詳見(jiàn) initializers)。 # bias_initializer: 偏置向量的初始化器 (see initializers). # kernel_regularizer: 運(yùn)用到 kernel 權(quán)值矩陣的正則化函數(shù) (詳見(jiàn) regularizer)。 # bias_regularizer: 運(yùn)用到偏置向的的正則化函數(shù) (詳見(jiàn) regularizer)。 # activity_regularizer: 運(yùn)用到層的輸出的正則化函數(shù) (它的 "activation")。 (詳見(jiàn) regularizer)。 # kernel_constraint: 運(yùn)用到 kernel 權(quán)值矩陣的約束函數(shù) (詳見(jiàn) constraints)。 # bias_constraint: 運(yùn)用到偏置向量的約束函數(shù) (詳見(jiàn) constraints)。 # Dropout參數(shù)解釋: # inputs:必須,即輸入數(shù)據(jù)。 # rate:可選,默認(rèn)為 0.5,即 dropout rate,如設(shè)置為 0.1,則意味著會(huì)丟棄 10% 的神經(jīng)元。 # noise_shape:可選,默認(rèn)為 None,int32 類型的一維 Tensor,它代表了 dropout mask 的 shape,dropout mask 會(huì)與 inputs 相乘對(duì) inputs 做轉(zhuǎn)換,例如 inputs 的 shape 為 (batch_size, timesteps, features),但我們想要 droput - - mask 在所有 timesteps 都是相同的,我們可以設(shè)置 noise_shape=[batch_size, 1, features]。 # seed:可選,默認(rèn)為 None,即產(chǎn)生隨機(jī)熟的種子值。 # training:可選,默認(rèn)為 False,布爾類型,即代表了是否標(biāo)志位 training 模式。 # name:可選,默認(rèn)為 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中網(wǎng)絡(luò)配置:
activation:設(shè)置層的激活函數(shù)。此參數(shù)由內(nèi)置函數(shù)的名稱指定,或指定為可調(diào)用對(duì)象。默認(rèn)情況下,系統(tǒng)不會(huì)應(yīng)用任何激活函數(shù)。
kernel_initializer 和 bias_initializer:創(chuàng)建層權(quán)重(核和偏差)的初始化方案。此參數(shù)是一個(gè)名稱或可調(diào)用對(duì)象,默認(rèn)為 “Glorot uniform” 初始化器。
kernel_regularizer 和 bias_regularizer:應(yīng)用層權(quán)重(核和偏差)的正則化方案,例如 L1 或 L2 正則化。默認(rèn)情況下,系統(tǒng)不會(huì)應(yīng)用正則化函數(shù)。
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)) |
構(gòu)建模型后,通過(guò)調(diào)用compile方法配置其訓(xùn)練過(guò)程:
# compile函數(shù):在模型準(zhǔn)備好進(jìn)行培訓(xùn)之前,它需要更多設(shè)置。這些是在模型的編譯步驟中添加的: # # 損失函數(shù) - 這可以衡量模型在訓(xùn)練過(guò)程中的準(zhǔn)確程度。我們希望最小化此功能,以便在正確的方向上“引導(dǎo)”模型。 # 優(yōu)化器 - 這是基于它看到的數(shù)據(jù)及其損失函數(shù)更新模型的方式。 # 度量標(biāo)準(zhǔn) - 用于監(jiān)控培訓(xùn)和測(cè)試步驟。以下示例使用精度,即正確分類的圖像的分?jǐn)?shù)。 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) |
compile有三個(gè)重要參數(shù):
· optimizer:訓(xùn)練過(guò)程的優(yōu)化方法。此參數(shù)通過(guò) tf.t?rain 模塊的優(yōu)化方法的實(shí)例來(lái)指定,比如:AdamOpt?imizer, RMSPropOptim?izer, GradientDescentOptimizer。
· loss:訓(xùn)練過(guò)程中使用的損失函數(shù)(通過(guò)最小化損失函數(shù)來(lái)訓(xùn)練模型)。 常見(jiàn)的選擇包括:均方誤差(mse),categorical_crossentropy和binary_crossentropy。 損失函數(shù)由名稱或通過(guò)從tf.keras.losses模塊傳遞可調(diào)用對(duì)象來(lái)指定。
· metrics:訓(xùn)練過(guò)程中,監(jiān)測(cè)的指標(biāo)(Used to monitor training)。
指定方法:名稱 或 可調(diào)用對(duì)象 from the tf.keras?.metrics 模塊。
以下顯示了配置培訓(xùn)模型的幾個(gè)示例:
# 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='目標(biāo)函數(shù) ', optimize?r='adam', metrics=['accuracy'])
目標(biāo)函數(shù),或稱損失函數(shù),是網(wǎng)絡(luò)中的性能函數(shù),也是編譯一個(gè)模型必須的兩個(gè)參數(shù)之一。由于損失函數(shù)種類眾多,下面以keras官網(wǎng)手冊(cè)的為例。
在官方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(亦稱作對(duì)數(shù)損失,logloss)
· categorical_crossentropy:亦稱作多類的對(duì)數(shù)損失,注意使用該目標(biāo)函數(shù)時(shí),需要將標(biāo)簽轉(zhuǎn)化為形如(nb_samples, nb_classes)的二值序列
· sparse_categorical_crossentrop:如上,但接受稀疏標(biāo)簽。注意,使用該函數(shù)時(shí)仍然需要你的標(biāo)簽與輸出值的維度相同,你可能需要在標(biāo)簽數(shù)據(jù)上增加一個(gè)維度:np.expand_dims(y,-1)
· kullback_leibler_divergence:從預(yù)測(cè)值概率分布Q到真值概率分布P的信息增益,用以度量?jī)蓚€(gè)分布的差異.
· cosine_proximity:即預(yù)測(cè)值與真實(shí)標(biāo)簽的余弦距離平均值的相反數(shù)
tf.keras.Model.e?valuate 和 tf.keras.Model.predict 方法能夠使用 NumPy 數(shù)據(jù) 和 tf.da?ta.Dataset 數(shù)據(jù)。要評(píng)估所提供數(shù)據(jù)的推理模式損失和指標(biāo),并且作為NumPy數(shù)組,預(yù)測(cè)所提供數(shù)據(jù)的推斷中最后一層的輸出:
#訓(xùn)練和評(píng)估模型: 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一般通過(guò)tensorflow.keras來(lái)使用,但是pycharm沒(méi)有提示,原因是因?yàn)閷?shí)際的keras路徑放在tensorflow/python/keras,但是在程序中tensorflow有沒(méi)有python這個(gè)目錄,解決方法如下 try: import tensorflow.keras as keras except: import tensorflow.python.keras as keras #加載并準(zhǔn)備MNIST數(shù)據(jù)集,將樣本從整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù) mnist = keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() #將數(shù)據(jù)歸一化,在訓(xùn)練網(wǎng)絡(luò)之前,必須對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。如果您檢查訓(xùn)練集中的第一個(gè)圖像,您將看到像素值落在0到255的范圍內(nèi) # 在饋送到神經(jīng)網(wǎng)絡(luò)模型之前,我們將這些值縮放到0到1的范圍。為此,將圖像組件的數(shù)據(jù)類型從整數(shù)轉(zhuǎn)換為float,并除以255.0。 x_train, x_test = x_train / 255.0, x_test / 255.0 #通過(guò)堆疊圖層構(gòu)建tf.keras.Sequential模型。選擇用于訓(xùn)練的優(yōu)化器和損失函數(shù): # 該網(wǎng)絡(luò)中的第一層tf.keras.layers.Flatten將圖像的格式從2d陣列(28乘28像素)轉(zhuǎn)換為28 * 28 = 784像素的1d陣列。可以將此圖層視為圖像中未堆疊的像素行并將其排列。該層沒(méi)有要學(xué)習(xí)的參數(shù); 它只重新格式化數(shù)據(jù)。 # 在像素被展平之后,網(wǎng)絡(luò)由tf.keras.layers.Dense兩層序列組成。這些是密集連接或完全連接的神經(jīng)層。第一Dense層有128個(gè)節(jié)點(diǎn)(或神經(jīng)元)。第二(和最后)層是10節(jié)點(diǎn)softmax層 - 這返回10個(gè)概率分?jǐn)?shù)的數(shù)組,其總和為1.每個(gè)節(jié)點(diǎn)包含指示當(dāng)前圖像屬于10個(gè)類之一的概率的分?jǐn)?shù)。 # Dense函數(shù)參數(shù) # units: 正整數(shù),輸出空間維度。 # activation: 激活函數(shù) (詳見(jiàn) activations)。 若不指定,則不使用激活函數(shù) (即,「線性」激活: a(x) = x)。 # use_bias: 布爾值,該層是否使用偏置向量。 # kernel_initializer: kernel 權(quán)值矩陣的初始化器 (詳見(jiàn) initializers)。 # bias_initializer: 偏置向量的初始化器 (see initializers). # kernel_regularizer: 運(yùn)用到 kernel 權(quán)值矩陣的正則化函數(shù) (詳見(jiàn) regularizer)。 # bias_regularizer: 運(yùn)用到偏置向的的正則化函數(shù) (詳見(jiàn) regularizer)。 # activity_regularizer: 運(yùn)用到層的輸出的正則化函數(shù) (它的 "activation")。 (詳見(jiàn) regularizer)。 # kernel_constraint: 運(yùn)用到 kernel 權(quán)值矩陣的約束函數(shù) (詳見(jiàn) constraints)。 # bias_constraint: 運(yùn)用到偏置向量的約束函數(shù) (詳見(jiàn) constraints)。 # Dropout參數(shù)解釋: # inputs:必須,即輸入數(shù)據(jù)。 # rate:可選,默認(rèn)為 0.5,即 dropout rate,如設(shè)置為 0.1,則意味著會(huì)丟棄 10% 的神經(jīng)元。 # noise_shape:可選,默認(rèn)為 None,int32 類型的一維 Tensor,它代表了 dropout mask 的 shape,dropout mask 會(huì)與 inputs 相乘對(duì) inputs 做轉(zhuǎn)換,例如 inputs 的 shape 為 (batch_size, timesteps, features),但我們想要 droput - - mask 在所有 timesteps 都是相同的,我們可以設(shè)置 noise_shape=[batch_size, 1, features]。 # seed:可選,默認(rèn)為 None,即產(chǎn)生隨機(jī)熟的種子值。 # training:可選,默認(rèn)為 False,布爾類型,即代表了是否標(biāo)志位 training 模式。 # name:可選,默認(rèn)為 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函數(shù):在模型準(zhǔn)備好進(jìn)行培訓(xùn)之前,它需要更多設(shè)置。這些是在模型的編譯步驟中添加的: # # 損失函數(shù) - 這可以衡量模型在訓(xùn)練過(guò)程中的準(zhǔn)確程度。我們希望最小化此功能,以便在正確的方向上“引導(dǎo)”模型。 # 優(yōu)化器 - 這是基于它看到的數(shù)據(jù)及其損失函數(shù)更新模型的方式。 # 度量標(biāo)準(zhǔn) - 用于監(jiān)控培訓(xùn)和測(cè)試步驟。以下示例使用精度,即正確分類的圖像的分?jǐn)?shù)。 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) #訓(xùn)練和評(píng)估模型: 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) |
本實(shí)驗(yàn)利用網(wǎng)上已有的北京房?jī)r(jià)數(shù)據(jù)集預(yù)測(cè)了北京的房?jī)r(jià),實(shí)現(xiàn)了TensorFlow的線性回歸應(yīng)用。
上一篇: Python培訓(xùn)_Python核心類型之元組
下一篇: 騰科華為培訓(xùn)課程之組播詳解