認識tensorflow - 【老魚學tensorflow2】
深度學習是模仿了生物的神經元的概念,你可以想象用一大堆的神經元通過各種刺激來對外部世界進行感知,從而建立起對外部世界的模型。
比如給你一個數據對:
| x | y |
|---|---|
| -1 | -3 |
| 0 | -1 |
| 1 | 1 |
| 2 | 3 |
| 3 | 5 |
| 4 | 7 |
我們可以使用深度學習通過從數據中學習來了解其中的規律,類似人類的學習,從我們的感知和實踐中認識世界。
我們從直觀的方式來看一下這些數據具有什么規律。
import numpy as np
import matplotlib.pyplot as plt
xs = np.array([-1.0, 0, 1, 2, 3, 4], dtype=float)
ys = np.array([-3, -1, 1, 3, 5, 7], dtype=float)
plt.plot(xs, ys)
plt.show()
顯示的圖形為:

從肉眼上看直觀的感覺是線性關系,我們用深度學習來訓練一下模型(假設我們不知道這個數據的規律的情況下)
import tensorflow as tf
import numpy as np
import tensorflow.keras as keras
xs = np.array([-1.0, 0, 1, 2, 3, 4], dtype=float)
ys = np.array([-3, -1, 1, 3, 5, 7], dtype=float)
model = keras.models.Sequential([
keras.layers.Dense(units=1, input_shape=[1])
])
model.compile(optimizer='sgd', loss='mean_squared_error')
model.fit(xs, ys, epochs=500)
print(model.predict([10.0]))
關于深度學習的代碼不多,我們一個一個來稍微簡單介紹一下。
model = keras.models.Sequential([
...
])
keras.models.Sequential() :建立了一個順序堆疊的模型,就像樂高積木一樣,這是一個一層一層順序堆疊起來的模型,其它估計還有分支一樣的模型。
在這個順序堆疊的模型中,其中首先加入了一個層(你可以理解為一塊樂高積木)為:keras.layers.Dense ,這是一個全連接層,也就是其神經元前面和后面全連接,就像我們大腦中的一個皮層,你可以想象成前面有很多插口線,后面也有很多輸出線。而這里我們只定義了一個輸入只有一個插口(輸入參數為一維),輸出也只有一個輸出線(輸出為一個數值)。
為何輸入只有一維、輸出也只有一維呢?
那是因為我們的數據中輸入只有一維的x,輸出也只有一維的y。
在定義好了模型后,可以對這個模型進行編譯了,編譯也很簡單,只要調用model.compile()函數就可以,不過這里需要指定兩個參數,這是本程序中相對比較難理解的部分。
首先指定了一個損失函數loss,損失函數用來確地我們是否學習到了,也就是我們要有一個評判我們是否學到了東西的函數,在深度學習中用損失函數來定義,比如這里用mean_squared_error來定義,也就是均方差,讓神經網絡的輸出值盡量地同期望的輸出值接近。
另一個參數是優化器optimizer。這里使用sgd優化算法,優化器本身就是一個函數,其目的是通過優化算法讓損失值盡量地減少。
keras中有多種優化器,這里使用梯度下降算法來進行優化。
最后通過model.fit(xs, ys, epochs=500)來進行訓練,訓練的迭代次數用500次。
當模型訓練完成后,我們就可以用此模型來進行model.predict([10.0])預測。
通過這樣簡單的一小段代碼就實現了一個深度學習的程序。

出處:http://www.rzrgm.cn/dreampursuer/
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

浙公網安備 33010602011771號