【theano-windows】学习笔记七——logistic回归
生活随笔
收集整理的這篇文章主要介紹了
【theano-windows】学习笔记七——logistic回归
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
前面只是學了最基本的theano操作,但是theano中還有很多其他的東西,比如圖結構,自定義函數等,這些暫時沒有用到就先不看了,后續學啥用啥,沒必要一口氣吃個胖子,免得消化不良還把前面吃的東西忘記了,先拿logistic回歸試試水
基本理論
推導可以看我前面你的博客softmax理論及代碼解讀——UFLDL, 這里只貼出前向計算公式和損失函數,畢竟theano可以自動梯度咯
前向計算公式就是sigmoid函數, 得到的是當前數據x標簽為1的概率
hθ(xi)=P(y=1|x;w,b)=11+e?w?x?b
損失函數的定義就是
代碼實現
導入包
import numpy as np import theano import theano.tensor as T定義樣本矩陣(樣本*屬性)以及對應標簽向量(樣本*標簽)
N=400#訓練集大小 feats=784#每個樣本的特征維度,可以當做輸入神經元個數 train_steps=10000#訓練次數 x=T.dmatrix('x') #樣本*特征維度 y=T.dvector('y') #樣本*標簽因為是二分類,所以只有一個輸出神經元,那么權重維度就是(輸入數據維度*1), 進而可以據此進行初始化共享變量,也即模型參數權重、偏置. 注意權重不能初始化為0, 因為這樣你的輸出就都是一樣了,整個網絡參數都會一樣,這還學個錘子
rng=np.random#隨機初始化權重 w=theano.shared(rng.randn(feats),name='w')#權重初始化 b=theano.shared(0.,name='b')#偏置初始化隨后計算梯度
#logistic回歸損失函數 print w.get_value().shape#看看每個輸入神經元對應的權重維度 p1=T.nnet.sigmoid(T.dot(x,w)+b) prediction=p1>0.5 xnet=-y*T.log(p1)-(1-y)*T.log(1-p1)#目標函數 cost=xnet.mean()+0.01*(w**2).sum()#損失函數+權重衰減 #求解梯度 gw,gb=theano.grad(cost,[w,b])#損失函數對權重和偏置求導利用function更新模型參數,以及輸出結果
#用function編譯訓練函數 train=theano.function(inputs=[x,y],outputs=[prediction,xnet],updates=[(w,w-0.1*gw),(b,b-0.1*gb)]) #預測函數 predict=theano.function(inputs=[x],outputs=[prediction])可以輸出看看預測結果
print 'Target values for D: ' print D[1] print 'Prediction values for D' print predict(D[0])后續
這只是最基礎的一個使用grad計算損失函數梯度, 然后用function更新參數的例子,循環還沒使用scan, 后續將跟進深度學習0.1文檔學習各種網絡的實現,當然依據需求對theano進行更深一步的探索
總結
以上是生活随笔為你收集整理的【theano-windows】学习笔记七——logistic回归的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 警惕!信用卡会影响房贷,想贷款买房最好别
- 下一篇: 六大国有银行手机银行跨行转账要手续费吗?