最近將英文原版書籍《python for data analysis》看完,也將《scikit-learn cookbook》例子實現完,對基本的機器學習有一定的了解,下面來學習強大的python深度學習庫theano以及keras。
import numpy
import theano
import theano.tensor as t
rng = numpy.random
n = 400
feats = 784s
d = (rng.randn(n, feats), rng.randint(size=n, low=0, high=2))
training_steps = 10000
x = t.matrix('x')
y = t.vector('y')
w = theano.shared(rng.randn(feats), name='w')
b =theano.shared(0., name='b')
p_1 = 1 / (1 + t.exp(-t.dot(x, w) - b))
xent = -y * t.log(p_1) - (1-y) * t.log(1-p_1)
cost = xent.mean() + 0.01 * (w ** 2).sum()
gw, gb = t.grad(cost, [w, b])
train = theano.function(inputs=[x,y], outputs=[prediction, xent],
updates=((w, w - 0.1 * gw), (b, b - 0.1 * gb)))
predict = theano.function(inputs=[x], outputs=prediction)
for i in range(training_steps):
pred, err = train(d[0], d[1])
print
"final model:"
print w.get_value(), b.get_value()
print
"target values for d:", d[1]
print
"prediction on d:", predict(d[0])
**解釋:
首先我們生成乙個用來邏輯回歸的模型。x,y,w,b的定義是theano中標準的定義方式,其中w,b是共享變數,為什麼需要這種變數呢,原因是後期需要gpu程式設計,需要將cpu中的變數移動到gpu中去,前期不需要了解。
p_1 = 1 / (1 + t.exp(-t.dot(x, w) - b))
這句話的含義對應的數學表示式為 h=
11+e
−(w∗
x+b)
這裡多了乙個b什麼意思,其實b可以看做是w0,原理與ufldl上的邏輯回歸表示式是一樣的。
xent = -y * t.log(p_1) - (1-y) * t.log(1-p_1)
對應的表示式為,這是代價函式的一部分 −y
∗log
(h(x
))−(
1−y)
∗log
(1−h
(x))
完整的代價函式為 j=
−1m[
∑i=1
my∗l
og(h
(x))
(1−y
)∗lo
g(1−
h(x)
)]則下面**是完整代價函式的一部分:
cost = xent.mean() + 0.01 * (w ** 2).sum()
後面的為正則化項,防止過度擬合。
下面**就是使用隨機梯度下降演算法來更新w,b的值。
gw, gb = t.grad(cost, [w, b])
train = theano.function(inputs=[x,y], outputs=[prediction, xent],
updates=((w, w - 0.1 * gw), (b, b - 0.1 * gb)))
predict = theano.function(inputs=[x], outputs=prediction)
for i in range(training_steps):
pred, err = train(d[0], d[1])
print
"final model:"
print w.get_value(), b.get_value()
print
"target values for d:", d[1]
print
"prediction on d:", predict(d[0])
這個例子雖然簡單,但知識量特別大,希望有讀者看的時候有疑問參考這篇文章,這篇作者寫的特別好,也很親民。 Theano學習系列(1) 符號變數
這段時間通過學習theano的library documentation,總結出使用theano去實現乙個具體的演算法一般需要以下幾個步驟 1 定義符號變數 2 建立起來符號表示式 3 建立起來圖連線關係也就是function函式實現的 4 呼叫function實現一定的功能,也就是完成編譯呼叫。在...
深度學習(2)安裝theano
環境 ubuntu 16.04 硬體 伺服器,顯示卡 4塊1080ti 我通過anaconda的方式來安裝,基於anaconda環境隔離,自動安裝依賴包等等的特點,用anaconda裝theano非常方便,不熟悉anaconda的可以參考我的部落格 ubuntu下安裝anaconda anacond...
深度學習實驗系列(1)
開篇貼上導師的幾句話 最近準備趁著幾位開題,把神經網路,深度學習方面的內容系統的挖挖。要學習深度學習,多少要了解一下神經網路,神經網路的典型就是bp,而bp本身是很簡單的。我們前面就從這幾個資料 關於資料,我會在接下來的內容中一一展開 開始吧。一 perception感知器演算法 先說一下感知器演算...