? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? by SA16225335,吳倩? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
一 簡介
? ? ? 2016年科大網(wǎng)絡(luò)程序設(shè)計課程即將結(jié)束莉测,筆者在這里寫下人生的第一篇博客讶泰,來總結(jié)一下這門課程給我?guī)淼膯l(fā)和提升,并且作為人生的又一個起點開始生命的下一次征程庭猩。首先在這里要感謝孟寧老師的教導(dǎo)帅刊,孟寧老師在課程中一反常態(tài)纸泡,并沒有使用傳統(tǒng)的上課授課的方式,而是采用項目驅(qū)動的方法赖瞒,由學(xué)生在老師的帶動下主動開發(fā)女揭,在這門課程中,班里70多個學(xué)生共同完成了這個項目栏饮。作為一個菜鳥吧兔,我必須慚愧的承認(rèn)我對這個項目并沒有什么直接的貢獻(xiàn),只在PPT知識共享時袍嬉,對Theano框架的知識進(jìn)行了共享境蔼≡钇剑“林花謝了春紅,太匆匆箍土,無奈朝來寒雨晚來風(fēng)”逢享,時光總是匆匆,在這門課中涮帘,我完整的學(xué)習(xí)了python語法拼苍,理解了關(guān)于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的原理,并且對CNN调缨,RNN,深度學(xué)習(xí)框架及圖像處理有了一定的了解吆你。在這個寒假弦叶,我將繼續(xù)學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的相關(guān)知識。堅持總會有結(jié)果妇多,明年我會繼續(xù)選修孟寧老師的高軟課程伤哺,定跟上老師步伐≌咦妫總之立莉,感謝老師讓我踏入新世界的大門。
二 什么是深度學(xué)習(xí)
? ? ? ?Andrew Ng曾經(jīng)說過“我們相信(神經(jīng)網(wǎng)絡(luò)代表的深度學(xué)習(xí))是讓我們獲得最接近于人工智能的捷徑”七问。這就是我們要學(xué)習(xí)深度學(xué)習(xí)的重要的原因蜓耻。相對于網(wǎng)絡(luò)上一提到神經(jīng)網(wǎng)絡(luò)就會提到的反向傳播,激活函數(shù)械巡,特征基向量刹淌,卷積神經(jīng)網(wǎng)絡(luò),筆者在這里想用自己淺薄的知識來談?wù)勛约簩ι窠?jīng)網(wǎng)絡(luò)的理解讥耗。
? ? ? 我在接觸神經(jīng)網(wǎng)絡(luò)之前有勾,曾看過一個關(guān)于對生物體大腦形象化的描述,人的大腦中有成千上億的神經(jīng)元細(xì)胞(甚至更多)古程,它們都長著像電線一樣的軸突蔼卡,神經(jīng)元在我們的大腦中構(gòu)成一個網(wǎng)狀結(jié)構(gòu),當(dāng)人們對外部事件進(jìn)響應(yīng)時挣磨,神經(jīng)元細(xì)胞會產(chǎn)生興奮也就是化學(xué)信號順著神經(jīng)元的網(wǎng)狀結(jié)構(gòu)進(jìn)行傳播雇逞,最終產(chǎn)生人的各種反應(yīng)趋急。以上相應(yīng)凡有高中學(xué)歷的大家都了解整個過程喝峦,故而不進(jìn)行詳述呜达。而進(jìn)行深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)谣蠢,就是根據(jù)大腦的反饋機(jī)構(gòu)進(jìn)行設(shè)計的。最簡單的神經(jīng)網(wǎng)絡(luò)一般有三層,第一層是輸入層眉踱,第二層是隱藏層挤忙,第三層是輸出層,第一層輸入數(shù)據(jù)后谈喳,隱藏層根據(jù)自己神經(jīng)上的比重對輸入層數(shù)據(jù)進(jìn)行自己的處理册烈,最后在第三層輸出層進(jìn)行輸出。我們把神經(jīng)網(wǎng)絡(luò)假設(shè)為一個小孩婿禽,在他的成長過程中赏僧,他將不斷的接收到各種各樣的信息,而神經(jīng)網(wǎng)絡(luò)也是如此扭倾,我們不斷的用各種數(shù)據(jù)訓(xùn)練它淀零,是他在隱藏層的每個分支都有不同的權(quán)重,在訓(xùn)練過程中膛壹,權(quán)重不斷的變化驾中,當(dāng)訓(xùn)練集達(dá)到一個數(shù)量時,會得到一個相對穩(wěn)定的權(quán)重模聋,這就如同大腦中的電信號傳播一樣肩民,每個神經(jīng)元都帶著不同大小的神經(jīng)信號,最后形成人的各種反應(yīng)链方,而神經(jīng)網(wǎng)絡(luò)也是如此持痰。我們不斷的訓(xùn)練它,使它不斷的糾正自己侄柔,最后實現(xiàn)預(yù)測功能共啃。
三 關(guān)于Theano的學(xué)習(xí)
3.1 Theano定義
Theano是一個Python庫,專門用于定義暂题、優(yōu)化移剪、求值數(shù)學(xué)表達(dá)式,效率高薪者,適用于多維數(shù)組纵苛。Theano是一個Python庫,用于定義言津、優(yōu)化攻人、求值數(shù)學(xué)表達(dá)式,即簡單來說悬槽,它就是一個代數(shù)符號系統(tǒng)怀吻。在數(shù)學(xué)表達(dá)式中的一個符號就是一個variable對象,對象之間用加減乘除等操作符連接起來初婆,就變成一個圖蓬坡,成為graph.在將theano運用于神經(jīng)網(wǎng)絡(luò)時猿棉,就是將網(wǎng)絡(luò)表示成一個巨大的公式。比如z=x+y這樣的表達(dá)式屑咳,就會組成成下面的圖萨赁。
代碼編寫如下:
import theano
from theano import tensor
# declare two symbolic floating-point scalars
a = tensor.dscalar()
b = tensor.dscalar()
# create a simple expression
c = a + b
# convert the expression into a callable object that takes (a,b)
# values as input and computes a value for c
f = theano.function([a,b], c)
# bind 1.5 to 'a', 2.5 to 'b', and evaluate 'c'
assert 4.0 == f(1.5, 2.5)
3.2 使用Theano的優(yōu)勢
1.使研究深度學(xué)習(xí)的各位們減少花在推導(dǎo)數(shù)和實現(xiàn)算法上的精力。
2.? 緊密集成Numpy兆龙,在Theano的編譯函數(shù)中使用numpy.ndarray
3.透明的使用Gpu杖爽,使得執(zhí)行數(shù)據(jù)密集型的計算速度高達(dá)CPU的140倍
4.高效的符號分解---替你計算一個或多個輸入函數(shù)的推導(dǎo)
5.速度和穩(wěn)定性優(yōu)化
6.動態(tài)生成C語言代碼,計算表達(dá)式更快速
7.廣泛的單元測試和自我驗證紫皇,能檢測和診斷許多類型的錯誤
8.讓你輕松的編寫Deep Learning模型慰安,并提供運行在GPU上的選擇,他使得構(gòu)建學(xué)習(xí)模型更加容易
3.3 為什么使用Theano
1.深度學(xué)習(xí)最好使用一些庫坝橡,比如Theano泻帮。主要是因為反向傳播調(diào)整參數(shù)時,需要求導(dǎo)计寇。鏈?zhǔn)角髮?dǎo)本身沒有難處。
但是深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)架構(gòu)設(shè)計的比較復(fù)雜脂倦,層數(shù)又多(15層不是夢)番宁。
在隱藏層多的神經(jīng)網(wǎng)絡(luò)中,推導(dǎo)公式不忍直視,人工求導(dǎo)顯然不是明智的赖阻。
Theano提供了grad梯度函數(shù)蝶押,自動根據(jù)表達(dá)式求一階導(dǎo)數(shù),grad(cost,param)火欧,其中cost函數(shù)可以是一個超長超長的表達(dá)式棋电。
param則可以是一個超大超大的數(shù)組或是矩陣。
顯然苇侵,有了grad函數(shù)赶盔,我們可以專心設(shè)計正向傳播的I/O,反向傳播只要一個grad函數(shù)即可榆浓。省去了復(fù)雜的公式推導(dǎo)
2.使用Python組織邏輯于未,C編譯執(zhí)行,CUDA并行加速計算陡鹃,是非常好的實驗平臺烘浦。
它的庫源碼中包含大量注釋,并且提供深度學(xué)習(xí)的幾個基本模型的代碼實現(xiàn)文檔萍鲸。
每篇文檔都采用paper的形式闷叉,集中了許多大牛的論文的精華、各種小trick脊阴,也給出了論文的具體引用握侧,方便按圖索驥蚯瞧。
CUDA(Compute Unified Device Architecture),顯卡廠商N(yùn)Vidia推出的運算平臺藕咏。 CUDA?是一種由NVIDIA推出的通用并行計算架構(gòu)状知,該架構(gòu)使GPU能夠解決復(fù)雜的計算問題。 它包含了CUDA指令集架構(gòu)(ISA)以及GPU內(nèi)部的并行計算引擎孽查。
3.4 原理介紹
在Theano中饥悴,每個可導(dǎo)運算都帶有一個grad函數(shù),對應(yīng)于圖中每一步單獨的求導(dǎo)(邊)盲再。比如 theano.tensor.nnet.sigmoid :
def grad(self, inp, grads):
x, = inp
gz, = grads
y = scalar_sigmoid(x)
rval = gz * y * (1.0 - y)
assert rval.type.dtype.find('float') != -1
return [rval]
對所有可導(dǎo)運算使用鏈?zhǔn)椒▌t西设,即在圖中沿著邊和節(jié)點傳播,就求出了最后我們想要的導(dǎo)數(shù)答朋。整個過程大抵如此贷揽,細(xì)節(jié)部分可以翻看一下這篇博客。http://colah.github.io/posts/2015-08-Backprop/
3.5 原理介紹
Theano基于Python的面向?qū)ο竺瓮耄运纳窠?jīng)網(wǎng)絡(luò)也是基于面向?qū)ο蟮乃悸啡懙摹?br>
【對象】
它認(rèn)為禽绪,淺層網(wǎng)絡(luò)的中分類器,深度網(wǎng)絡(luò)中的每個層洪规,都是一個對象印屁。
在這個對象里,你被指定了輸入格式斩例,你只需要做兩件事:
根據(jù)格式雄人,定義參數(shù)、定義輸出念赶。
【數(shù)據(jù)讀入/處理】
從文件讀入數(shù)據(jù)础钠,并且對數(shù)據(jù)進(jìn)行全局分享處理(shared)
theano.tensor中封裝的著大量的惰性函數(shù)。這些惰性函數(shù)叉谜,在Python里是不會執(zhí)行的旗吁。需要在theano.function()里執(zhí)行。
【主過程:前向傳播構(gòu)建&反向傳播迭代】
創(chuàng)建各個神經(jīng)網(wǎng)絡(luò)層正罢、分類器的實例對象阵漏,由I/O首尾相連,最后利用分類器構(gòu)建cost函數(shù)翻具,完成前向傳播履怯。
利用各個層對象的參數(shù)、cost函數(shù)裆泳,構(gòu)建梯度表達(dá)式叹洲,以及updates列表。
為訓(xùn)練集工禾、驗證集运提、測試集創(chuàng)建以theano.function()為殼的模型蝗柔。
使用mini-batch梯度法分批訓(xùn)練訓(xùn)練集,測試驗
3.6 編程基礎(chǔ)
theano.tensor常用數(shù)據(jù)類型
學(xué)習(xí)theano民泵,首先要學(xué)的就是theano.tensor使用癣丧,其是基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),功能類似于Python.numpy栈妆,教程網(wǎng)站為:http://deeplearning.Net/software/theano/library/tensor/basic.html
在theano.tensor數(shù)據(jù)類型中胁编,有double、int鳞尔、uchar嬉橙、float等各種類型,不過我們最常用到的是int和float類型寥假,float是因為GPU一般是float32類型市框,所以在編寫程序的時候,我們很少用到double糕韧,常用的數(shù)據(jù)類型如下:
數(shù)值:iscalar(int類型的變量)枫振、fscalar(float類型的變量)
一維向量:ivector(int 類型的向量)、fvector(float類型的向量)萤彩、
二維矩陣:fmatrix(float類型矩陣)蒋得、imatrix(int類型的矩陣)
三維float類型矩陣:ftensor3
四維float類型矩陣:ftensor4
其它類型只要把首字母變一下就可以了,更多類型請參考:http://deeplearning.net/software/theano/library/tensor/basic.html#theano.tensor.TensorV
3.7 編程實例
實例1:
import theano
x=theano.tensor.iscalar('x')#聲明一個int類型的變量x
y=theano.tensor.pow(x,3)#定義y=x^3
f=theano.function([x],y)#定義函數(shù)的自變量為x(輸入)乒疏,因變量為y(輸出)
print f(2)#計算當(dāng)x=2的時候,函數(shù)f(x)的值
print f(4)#計算當(dāng)x=4時饮焦,函數(shù)f(x)=x^3的值
實例2:
import theano
x =theano.tensor.fscalar('x')#定義一個float類型的變量x
y= 1 / (1 + theano.tensor.exp(-x))#定義變量y
f= theano.function([x],y)#定義函數(shù)f怕吴,輸入為x,輸出為y
print f(3)#計算當(dāng)x=3的時候县踢,y的值
例3:function使用示例
我們再看一個多個自變量转绷、同時又有多個因變量的函數(shù)定義例子:
import theano
x, y =theano.tensor.fscalars('x', 'y')
z1= x + y
z2=x*y
f =theano.function([x,y],[z1,z2])#定義x备蚓、y為自變量随闽,z1、z2為函數(shù)返回值(因變量)
print f(2,3)#返回當(dāng)x=2埋市,y=3的時候谴返,函數(shù)f的因變量z1煞肾,z2的值 為x,輸出為y
print f(3)#計算當(dāng)x=3的時候嗓袱,y的值
3.8 學(xué)習(xí)深度學(xué)習(xí)必須要學(xué)習(xí)的幾個函數(shù)
例1籍救、求偏導(dǎo)數(shù)
theano有個很好用的函數(shù),就是求函數(shù)的偏導(dǎo)數(shù)theano.grad()渠抹,比如上面的S函數(shù)蝙昙,我們要求當(dāng)x=3的時候闪萄,s函數(shù)的導(dǎo)數(shù),代碼如下:
import theano
x =theano.tensor.fscalar('x')#定義一個float類型的變量x
y= 1 / (1 + theano.tensor.exp(-x))#定義變量y
dx=theano.grad(y,x)#偏導(dǎo)數(shù)函數(shù)
f= theano.function([x],dx)#定義函數(shù)f奇颠,輸入為x败去,輸出為s函數(shù)的偏導(dǎo)數(shù)
print f(3)#計算當(dāng)x=3的時候,函數(shù)y的偏導(dǎo)數(shù)
例2烈拒、共享變量
共享變量是多線程編程中的一個名詞圆裕,故名思議就是各線程,公共擁有的變量缺菌,這個是為了多線程高效計算葫辐、訪問而使用的變量。因為深度學(xué)習(xí)中伴郁,我們整個計算過程基本上是多線程計算的耿战,于是就需要用到共享變量。在程序中焊傅,我們一般把神經(jīng)網(wǎng)絡(luò)的參數(shù)W剂陡、b等定義為共享變量,因為網(wǎng)絡(luò)的參數(shù)狐胎,基本上是每個線程都需要訪問的鸭栖。
import theano
import numpy
A=numpy.random.randn(3,4);#隨機(jī)生成一個矩陣
x = theano.shared(A)#從A,創(chuàng)建共享變量x
print x.get_value()
通過get_value()握巢、set_value()可以查看晕鹊、設(shè)置共享變量的數(shù)值
例3、共享變量參數(shù)更新
前面我們提到theano.function函數(shù)暴浦,有個非常重要的參數(shù)updates溅话,updates是一個包含兩個元素的列表或tuple,updates=[old_w,new_w]歌焦,當(dāng)函數(shù)被調(diào)用的時候飞几,這個會用new_w替換old_w,具體看一下下面例子:
import theano
w= theano.shared(1)#定義一個共享變量w,其初始值為1
x=theano.tensor.iscalar('x')
f=theano.function([x], w, updates=[[w, w+x]])#定義函數(shù)自變量為x独撇,因變量為w屑墨,當(dāng)函數(shù)執(zhí)行完畢后,更新參數(shù)w=w+x
print f(3)#函數(shù)輸出為w
print w.get_value()#這個時候可以看到w=w+x為4
這個主要用于梯度下降的時候纷铣,要用到卵史。比如updates=[w,w-α*(dT/dw)],其中dT/dw就是我們梯度下降的時候关炼,損失函數(shù)對參數(shù)w的偏導(dǎo)數(shù)程腹,α是學(xué)習(xí)率。
3.9 應(yīng)用方向
邏輯回歸儒拂,三層神經(jīng)網(wǎng)絡(luò)寸潦,卷積神經(jīng)網(wǎng)絡(luò)等
四 ?項目簡介
4.1 項目地址
coding.net:https://coding.net/u/sharon12/p/np2016-1765866307/git/tree/master
4.2 項目概述
?4.2.1 項目功能
輸入血常規(guī)圖片色鸳,程序通過處理圖片上的數(shù)據(jù),進(jìn)行性別和年齡的預(yù)測见转。(暫只能處理獨墅湖高教區(qū)的體檢單)
?4.2.2 具體流程
輸入圖片->圖片OCR識別->將識別出來的數(shù)值存入MongoDB->根據(jù)機(jī)器學(xué)習(xí)方法生成模型并進(jìn)行預(yù)測
?4.2.3 項目概要
該項目主要分為三個部分命雀。第一部分是web端圖片的導(dǎo)入和結(jié)果的顯示;第二部分是OCR識別模塊,用來進(jìn)行圖片的處理并將處理數(shù)據(jù)存儲進(jìn)mongodb;第三部分是學(xué)習(xí)預(yù)測模塊斩箫,用來進(jìn)行性別和年齡的預(yù)測吏砂。
4.3 運行環(huán)境
?安裝前置依賴
# 安裝 Python 發(fā)布版本,dev包必須安裝乘客,很多用pip安裝包都需要編譯
sudo apt-get install python2.7 python2.7-dev python3.2 python3.2-dev
# 很多pip安裝的包都需要libssl和libevent編譯環(huán)境
sudo apt-get install build-essential libssl-dev libevent-dev libjpeg-dev libxml2-dev libxslt-dev
安裝python模塊
PS: 裝python模塊時最好每一步進(jìn)入python命令行嘗試import是否成功
# 安裝pip
sudo apt-get install python-pip
# 安裝numpy,
sudo apt-get install python-numpy # http://www.numpy.org/
# 安裝opencv
sudo apt-get install python-opencv # http://opencv.org/
#裝完后需要更新環(huán)境變量
vim /etc/bash.bashrc
#在文件末尾添加兩行代碼
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/dist-packages
export PYTHONPATH="${PYTHONPATH+${PYTHONPATH}:}/usr/local/lib/python2.7/site-packages"
##安裝OCR和預(yù)處理相關(guān)依賴
sudo apt-get install tesseract-ocr
sudo pip install pytesseract
sudo apt-get install python-tk
sudo pip install pillow
# 安裝Flask框架狐血、mongo
sudo pip install Flask
sudo apt-get install mongodb # 如果找不到可以先sudo apt-get update
sudo service mongodb started
sudo pip install pymongo
如果import cv2報no module name cv2。需要從源碼編譯opencv安裝易核,教程地址如下:OPENCV2.4.9源碼安裝
安裝tensorflow
pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.12.0rc0-cp27-none-linux_x86_64.whl
運行demo
cd? BloodTestReportOCR
python view.py # upload圖像,在瀏覽器打開http://yourip:8080
4.4 部分文件功能簡介
view.py
Web 端上傳圖片到服務(wù)器匈织,存入mongodb并獲取oid
imageFilter.py
對圖像透視裁剪和OCR進(jìn)行了簡單的封裝,以便于模塊間的交互牡直,規(guī)定適當(dāng)?shù)慕涌?/p>
imageFilter = ImageFilter() # 可以傳入一個opencv格式打開的圖片
num = 22
print imageFilter.ocr(num)
ocr函數(shù) - 模塊主函數(shù)返回識別數(shù)據(jù)
用于對img進(jìn)行ocr識別缀匕,他會先進(jìn)行剪切,之后進(jìn)一步做ocr識別碰逸,返回一個json對象 如果剪切失敗乡小,則返回None @num 規(guī)定剪切項目數(shù)
perspect函數(shù)做 - 初步的矯正圖片
用于透視image,他會緩存一個透視后的opencv numpy矩陣饵史,并返回該矩陣 透視失敗满钟,則會返回None,并打印不是報告 @param 透視參數(shù)
關(guān)于param
參數(shù)的形式為[p1, p2, p3 ,p4 ,p5]胳喷。 p1,p2,p3,p4,p5都是整型零远,其中p1必須是奇數(shù)。
p1是高斯模糊的參數(shù)厌蔽,p2和p3是canny邊緣檢測的高低閾值,p4和p5是和篩選有關(guān)的乘數(shù)摔癣。
如果化驗報告單放在桌子上時奴饮,有的邊緣會稍微翹起,產(chǎn)生比較明顯的陰影择浊,這種陰影有可能被識別出來戴卜,導(dǎo)致定位失敗。 解決的方法是調(diào)整p2和p3琢岩,來將陰影線篩選掉投剥。但是如果將p2和p3調(diào)的比較高,就會導(dǎo)致其他圖里的黑線也被篩選掉了担孔。 參數(shù)的選擇是一個問題江锨。 前列們在getinfo.default中設(shè)置的是一個較低的閾值吃警,p2=70,p3=30,這個閾值不會屏蔽陰影線啄育。 如果改為p2=70,p3=50則可以屏蔽酌心,但是會導(dǎo)致其他圖片識別困難。
就現(xiàn)在來看挑豌,得到較好結(jié)果的前提主要有三個
化驗單盡量平整
圖片中應(yīng)該包含全部的三條黑線
圖片盡量不要包含化驗單的邊緣安券,如果有的話,請盡量避開有陰影的邊緣氓英。
filter函數(shù) - 過濾掉不合格的或非報告圖片
返回img經(jīng)過透視過后的PIL格式的Image對象侯勉,如果緩存中有PerspectivImg則直接使用,沒有先進(jìn)行透視 過濾失敗則返回None @param filter參數(shù)
autocut函數(shù) - 將圖片中性別铝阐、年齡址貌、日期和各項目名稱數(shù)據(jù)分別剪切出來
用于剪切ImageFilter中的img成員,剪切之后臨時圖片保存在out_path饰迹, 如果剪切失敗芳誓,返回-1,成功返回0 @num 剪切項目數(shù) @param 剪切參數(shù)
剪切出來的圖片在BloodTestReportOCR/temp_pics/ 文件夾下
函數(shù)輸出為data0.jpg,data1.jpg……等一系列圖片啊鸭,分別是白細(xì)胞計數(shù)锹淌,中性粒細(xì)胞記數(shù)等的數(shù)值的圖片。
classifier.py
用于判定裁剪矯正后的報告和裁剪出檢測項目的編號
imgproc.py
將識別的圖像進(jìn)行處理二值化等操作赠制,提高識別率 包括對中文和數(shù)字的處理
digits
將該文件替換Tesseract-OCR\tessdata\configs中的digits
4.5 實驗結(jié)果
首先在終端輸入view.py,在后臺會展示index.html頁面赂摆,在頁面選擇文件上傳并點擊提交,后臺會調(diào)用imageFilter.py中的ocr,對圖像進(jìn)行灰度化钟些,裁剪和OCR識別烟号,并將圖片和識別出來的數(shù)據(jù)存入數(shù)據(jù)庫并在頁面進(jìn)行展示
然后點擊生成報告,這次程序中根據(jù)fid將數(shù)據(jù)從mongodb數(shù)據(jù)庫中讀出數(shù)據(jù)政恍,并在頁面上進(jìn)行展示汪拥,讀取不準(zhǔn)確的地方可以修改。
最后篙耗,我們調(diào)用已經(jīng)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)迫筑,將數(shù)據(jù)輸入進(jìn)去進(jìn)行預(yù)測,以下是預(yù)測結(jié)果宗弯。
由于筆者并沒有直接參與實驗代碼的編寫脯燃,故這里只敘述了關(guān)于整個實驗的主要文件的用途和運行的詳細(xì)過程,并對自己分享的Theano框架進(jìn)行了詳細(xì)的介紹蒙保。若想要了解更多關(guān)于本次實驗更細(xì)致的事情辕棚,請參考以下鏈接:
1.http://blog.csdn.net/u014659656/article/details/53887507#課程心得體會
2.http://rp38.cn/2016/12/25/np2016/
在那里,你會得到關(guān)于更多實驗詳盡的描述。
五 個人心得
? ? ? 自從來到科大后逝嚎,才感覺到大神林立扁瓢,然而自己對時間的利用卻并不充分。這門課中懈糯,也是僅僅能夠跟上項目更新的步伐涤妒。在接下來的日子里,會繼續(xù)對不足的知識點進(jìn)行學(xué)習(xí)赚哗,更加深入的理解神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的知識她紫,做更多關(guān)于這一方面的研究。
六 學(xué)習(xí)鏈接
2.theano文檔