第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

TensorFlow 入門教程

使用 Keras 進(jìn)行回歸

我們在之前的課程之中學(xué)習(xí)到的模型都是分類模型,也就是說模型的輸出是某一個類別;而這節(jié)課我們來學(xué)習(xí)回歸模型。

1. 回歸模型與分類模型的不同

簡單來說,兩者最直觀的區(qū)別就是:回歸模型的輸出是一個連續(xù)的數(shù)值,而回歸模型的輸出是一個具體的類別。

舉個例子,在生活中:

  • 測量體溫、計算運動時間等都屬于回歸任務(wù);
  • 擲色子、拋硬幣等都屬于分類任務(wù)。

但是從整體的程序角度來說,回歸模型又與回歸模型有以下幾個詳細(xì)的不同:

  • 激活函數(shù)不同,回歸模型的激活函數(shù)一般是 Relu 等激活函數(shù),或者沒有激活函數(shù);
  • 損失函數(shù)不同,回歸模型的損失函數(shù)一般是 MSE 和 RMSE 等損失函數(shù);
  • 衡量標(biāo)準(zhǔn)不再使用準(zhǔn)確率,因為回歸任務(wù)無法定義準(zhǔn)確率。

2. 數(shù)據(jù)獲取

我們這次采用的任務(wù)示例數(shù)據(jù)是 TensorFlow 的 Keras 內(nèi)部內(nèi)置的波士頓房屋價格數(shù)據(jù)集合,我們會以此數(shù)據(jù)集合為基礎(chǔ)進(jìn)行我們的回歸任務(wù)模型的構(gòu)建。

因為該數(shù)據(jù)集合已經(jīng)包含在 TensorFlow 之中,因此我們可以直接使用以下語句進(jìn)行數(shù)據(jù)集合的下載。

(train_data, train_labels), (test_data, test_labels) = tf.keras.datasets.boston_housing.load_data()

讓我們先來認(rèn)識一下數(shù)據(jù),該數(shù)據(jù)集合包含:

  • 每個樣本包含13個特征,每個特征表示特定的因素,這些特征包括:
    • CRIM:犯罪率;
    • ZN: 2.5 平凡英尺及其以上的住宅比例;
    • INDUS: 非零售業(yè)務(wù)地區(qū)比例;
    • CHAS:1-土地在河邊,0-土地不在河邊;
    • NOX:一氧化碳濃度;
    • RM:平居每人房子數(shù)量;
    • AGE:1940年之前建成的建筑的比例;
    • DIS:與波士頓就業(yè)中心的距離;
    • RAD:輻射指標(biāo);
    • TAX:稅率指標(biāo);
    • PTRATTO:師生比例;
    • B:黑人比例指數(shù);
    • LSTAT:較低地位人群的比例;
  • 每個樣本的標(biāo)簽是房價 MEDV,采用自有住房的中位數(shù)來表示。

我們可以使用以下方式來查看數(shù)據(jù)的部分內(nèi)容:

print(train_data.shape)
print(test_data.shape)
print(train_data[0])
print(train_labels[0])

得到的結(jié)果為:

(404, 13)
(102, 13)
[1.23247 0. 8.14 0. 0.538 6.142  91.7 3.9769  4. 307. 21. 396.9  18.72]
15.2

3. 模型的構(gòu)建

在這里我們?nèi)匀皇褂米钇胀ǖ捻樞蚰P蛠磉M(jìn)行表示,于是我們可以得到我們的模型表示為:

model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(128, activation='relu', input_shape=(13,)),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(1)
])

在該模型之中,前兩層是我們很熟悉的全連接層。

這里值得注意的是在最后一層,因為我們想要輸出一個連續(xù)的值,因此我們僅僅使用了一個神經(jīng)元的全連接層,而且沒有規(guī)定激活函數(shù),而實將其簡單輸出。

4. 整體程序與輸出結(jié)果

經(jīng)過了上面兩個步驟,我們已經(jīng)可以得到我們的程序代碼了,具體如下:

import tensorflow as tf

(train_data, train_labels), (test_data, test_labels) = tf.keras.datasets.boston_housing.load_data()
train_shape = train_data.shape
train_dataset = tf.data.Dataset.from_tensor_slices((train_data, train_labels)).batch(8).shuffle(buffer_size=train_shape[0])
test_dataset = tf.data.Dataset.from_tensor_slices((test_data, test_labels)).batch(8)

model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(128, activation='relu', input_shape=(13,)),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(1)
])
model.summary()
model.compile(optimizer='rmsprop', loss='mse')
model.fit(train_dataset, epochs=60)

result = model.evaluate(test_dataset)
print(result)

在該程序之中,唯一的不同就是該程序的優(yōu)化器采用了 RMSProp ,與Adam相比,該優(yōu)化器更加使用于回歸任務(wù)。

而且我們的損失函數(shù)也采用了均方誤差 (MSE) 的形式來衡量。簡單來說,均方誤差就是用來衡量“模型輸出”與“真實值”之間的距離,MSE 越小則表示該模型的精確度越高,被廣泛應(yīng)用于回歸任務(wù)之中。

該程序的輸出結(jié)果為:

Model: "sequential_11"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_36 (Dense)             (None, 128)               1792      
_________________________________________________________________
dense_37 (Dense)             (None, 64)                8256      
_________________________________________________________________
dense_38 (Dense)             (None, 1)                 65        
=================================================================
Total params: 10,113
Trainable params: 10,113
Non-trainable params: 0
_________________________________________________________________
Epoch 1/40
51/51 [==============================] - 0s 1ms/step - loss: 291.5432
Epoch 2/40
51/51 [==============================] - 0s 1ms/step - loss: 169.2546
Epoch 3/40
51/51 [==============================] - 0s 977us/step - loss: 165.5226
...........................
Epoch 38/40
51/51 [==============================] - 0s 950us/step - loss: 41.2446
Epoch 39/40
51/51 [==============================] - 0s 1ms/step - loss: 40.0520
Epoch 40/40
51/51 [==============================] - 0s 1ms/step - loss: 41.2494
13/13 [==============================] - 0s 1ms/step - loss: 33.5408
33.54079818725586

由此可見,我們的模型在誤差方面已經(jīng)降低到了 33 的 MSE。

5. 小結(jié)

這節(jié)課我們學(xué)習(xí)了回歸任務(wù)與分類任務(wù)的不同,同時了解了回歸任務(wù)常用的 MSE 與 RMSProp 等指標(biāo)與優(yōu)化器。最后我們知道了如何使用 TensorFlow 中的 Keras 來構(gòu)建一個回歸任務(wù)的模型。

這節(jié)課之中我們自己動手實現(xiàn)了一個回歸模型,雖然比較簡單,但是這卻是回歸任務(wù)的基本程序框架。
圖片描述