深度學習是模仿了生物的神經元的概念,你可以想象用一大堆的神經元通過各種刺激來對外部世界進行感知,從而建立起對外部世界的模型,
比如給你一個資料對:
| 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])預測,
通過這樣簡單的一小段代碼就實作了一個深度學習的程式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/5352.html
標籤:其他
上一篇:Tensorflow實作影像資料增強(Data Augmentation)
下一篇:回圈神經網路(RNN)簡易教程
