TensorFlow深度學習筆記 邏輯回歸 實踐篇

Practical Aspects of Learning

轉載請注明作者:夢里風林
Github工程地址:https://github.com/ahangchen/GDLnotes
歡迎star洋闽,有問題可以到Issue區(qū)討論
官方教程地址
視頻/字幕下載

課程目標:學習簡單的數(shù)據展示苍狰,訓練一個Logistics Classifier,熟悉以后要使用的數(shù)據

Install Ipython NoteBook

可以參考這個教程

  • 可以直接安裝anaconda称诗,里面包含了各種庫毒嫡,也包含了ipython;
  • 推薦使用python2的版本,因為很多l(xiāng)ib只支持python2舞吭,而且python3在升級中,支持3.4還是3.5是個很糾結的問題析珊。
  • 安裝anaconda后直接在終端輸入 ipython notebook羡鸥,則會運行一個ipython的server端,同時在你的瀏覽器中打開基于你終端目錄的一個頁面:


  • 點開ipynb文件即可進入文件編輯頁面


上圖即為practical部分的教程忠寻,可以在github下載

官方推薦使用docker來進行這部分教程惧浴,但簡單起見我們先用ipython notebook

Install TensorFlow

安裝教程就在TensorFlow的github頁上>>>點擊查看

按照官方的流程裝就好了,這里講一下幾種方式的特點:

  1. pip: 安裝在全局的python解釋器中奕剃,簡單
  2. Third party: Virtualenv, Anaconda and Docker:都能創(chuàng)建tensorflow獨立的編譯環(huán)境衷旅,但就是多了一份包
  3. Source: 能夠適應不同的python版本(比如編譯一個3.5版的)捐腿,但源碼編譯可能有許多坑
  • ubuntu安裝時,需要注意自己的python - pip - tensorflow版本是否對應(比如是否都是2.7)柿顶,

  • 使用sudo命令時茄袖,注意自己的環(huán)境變量是否變化(會導致pip或python命令對應的版本變化)

  • 具體講一下ubuntu安裝tensorflow流程:

    • 安裝anaconda2
    • 確定自己終端的pip和python版本:
      $ pip -V && python -V
    

    確認使用的是否都來自anaconda,如果不是嘁锯,則應該使用類似這樣的命令運行對應的pip:

      $ /home/cwh/anaconda2/bin/pip -V
    

    使用sudo命令時最好也看一下版本

    • 使用anaconda創(chuàng)建一個tensorflow虛擬環(huán)境:
      $ conda create -n tensorflow python=2.7
    
    • 切換到tensorflow環(huán)境下(實際上是更換了環(huán)境變量里的pip和python)绞佩,下載安裝tensorflow,需要sudo權限
      $ source activate tensorflow
      (tensorflow)$ sudo pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0rc0-cp27-none-linux_x86_64.wh
      $ source deactivate
    

    注意如果安裝的是gpu版本猪钮,還需要按照官網說明安裝cuda和cudaCNN

    • 安裝成功后就可以在tensorflow的python環(huán)境下品山,執(zhí)行import tensorflow看看了。

notMNIST

修改的MNIST烤低,不夠干凈肘交,更接近真實數(shù)據,比MNIST任務更困難扑馁。

Todo

我將官方教程的一個文件拆成了多個(以文件持久化為邊界)涯呻,然后在schedule.py里統(tǒng)一調用,在各個文件里可以執(zhí)行各個部分的功能測試腻要。

  • 下載

    • 使用urlretrieve來獲取數(shù)據集notMNIST_large.tar.gz和notMNIST_small.tar.gz

    代碼示例:load_data.py

  • 解壓

    • 使用tarfile模塊來解壓剛剛下載的壓縮包

    代碼示例:extract.py

  • 讀圖 - 展示 - 序列化

    • 用ndimage讀取一部分圖片复罐,用pickle將讀取到的對象(ndarray對象的list)序列化存儲到磁盤
    • 用matplotlib.plot.imshow實現(xiàn)圖片顯示,可以展示任意的numpy.ndarray雄家,詳見show_imgs(dataset)
    • 這里展示的是二值化圖片效诅,可以設置顯示為灰度圖
    • 將每個class對應的圖像數(shù)據集序列化到磁盤

    代碼示例:img_pickle.py

  • 整理數(shù)據集

    • 用pickle讀取pickle文件,
    • 從train_folder中為10個class分別獲取10000個valid_dataset和20000個train_dataset趟济,
    • 其中對每個class讀取到的數(shù)據乱投,用random.shuffle將數(shù)據亂序化
    • 將各個class及其對應的label序列化到磁盤,分別為訓練器和校驗集
    • 從test_folder中為10個class分別獲取10000個test_dataset,
    • 其中對每個class讀取到的數(shù)據顷编,用random.shuffle將數(shù)據亂序化
    • 將各個class及其對應的label序列化到磁盤戚炫,作為測試集

    代碼示例merge_prune.py

  • 去除重復數(shù)據

    • load_pickle,加載dataset

    • 先將valid_dataset中與test_dataset重復部分剔除媳纬,再將train_dataset中與valid_dataset重復部分剔除

    • 每個dataset都是一個二維浮點數(shù)組的list双肤,也可以理解為三維浮點數(shù)組,

    • 比較list中的每個圖钮惠,也就是將list1中每個二維浮點數(shù)組與list2中每個二維浮點數(shù)組比較

    • 示例代碼即為clean_overlap.py中的imgs_idx_except

    • 我們在拿list1中的一個元素跟list2中的一個元素比較時茅糜,總共需要比較len(list1) * len(list2) * image_size * image_size次,速度極慢

    • 實際上這是有重復的計算的萌腿,就在于限匣,list2中的每個元素,都被遍歷了len(list1)次

    • 因此有這樣的一個優(yōu)化,我們遍歷每個圖米死,用圖中的灰度值锌历,仿照BKDRHash,得到每個圖都不同的hash值峦筒,比較hash值來比較圖像

    • 示例代碼即為clean_overlap.py中的imgs_idx_hash_except

    • 這樣每個圖都只需要訪問一次究西,計算hash的時間變?yōu)?len(list1) + len(list2)) * image_size * image_size

    • 比較的次數(shù)是len(list1) * len(list2)

    • 由于我們的數(shù)據中,list1和list2的長度是大數(shù)物喷,所以節(jié)省的時間是相當可觀的

    • 在我的機器上卤材,比較完valid_dataset和test_dataset需要的時間分別是25000秒(10000次比較,每次2-3秒)和60秒

    • 然后再將清理后的數(shù)據序列化到磁盤即可

    代碼示例: clean_overlap.py

  • 訓練一個logistics 模型

    • 將train_dataset作為輸入峦失,用valid_dataset進行驗證(預測成功率82.5%)
    • 為了重復利用訓練后的分類器扇丛,將其序列化到磁盤

    代碼示例: logistic_train.py

  • Measure Performance

    • 分類器會嘗試去記住訓練集

    • 遇到訓練集中沒有的數(shù)據時,分類器可能就沒轍了

    • 所以我們應該measure的是尉辑,分類器如何產生新數(shù)據(生成能力(推導能力)越大帆精,說明它應對新數(shù)據能力越強)

    • 僅measure分類器記憶數(shù)據集的能力并不能應對新數(shù)據(沒有學到規(guī)律),所以不應該拿舊數(shù)據去measure

    • 因此measure的方式應該是拿新數(shù)據去看分類器的預測準確度(never see, can't memorize)

    • 但是在measure的過程中隧魄,我們會根據測試數(shù)據去重新調整分類器卓练,使其對所有測試數(shù)據都生效

    • 也就是說測試數(shù)據變成了訓練集的一部分,因此這部分數(shù)據我們只能作為valid_dataset购啄,而不能用于衡量最后的performance

    • 解決方法之一即襟企,最終進行performance measure的數(shù)據集,必須是調整分類器的過程中沒有使用過的

    • 即堅持一個原則狮含,測試數(shù)據不用于訓練

    在機器學習比賽Kaggle中顽悼,有public data,validate data辉川,并有用于測試(選手未知)的private data表蝙,只有在訓練時自己的分類器時拴测,預先取一部分數(shù)據作為test data乓旗,
    才能不會在train和valid的過程中被已有數(shù)據所蒙蔽

  • Validation dataset

    • 驗證集越大,驗證的可信度越大
    • 統(tǒng)計學上集索,調整分類器后屿愚,當30個以上預測結果的正確性發(fā)生變化的話,這種變化是可信的务荆,值得注意的妆距,小于30是噪音
    • 因此Validation dataset通常數(shù)據要大于30000個,在準確率變化高于0.1%時函匕,認為分類器的performance變化
    • 但這樣需要的數(shù)據往往偏多娱据,所以可以嘗試交叉驗證(cross validation),交叉驗證有個缺點是速度慢

覺得我的文章對您有幫助的話盅惜,點擊這里給個star吧
(程序員一定要有一個Github賬號爸惺!<纱)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市结啼,隨后出現(xiàn)的幾起案子掠剑,更是在濱河造成了極大的恐慌,老刑警劉巖郊愧,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朴译,死亡現(xiàn)場離奇詭異,居然都是意外死亡属铁,警方通過查閱死者的電腦和手機眠寿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來焦蘑,“玉大人澜公,你說我怎么就攤上這事±撸” “怎么了坟乾?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蝶防。 經常有香客問我甚侣,道長,這世上最難降的妖魔是什么间学? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任殷费,我火速辦了婚禮,結果婚禮上低葫,老公的妹妹穿的比我還像新娘详羡。我一直安慰自己,他們只是感情好嘿悬,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布实柠。 她就那樣靜靜地躺著,像睡著了一般善涨。 火紅的嫁衣襯著肌膚如雪窒盐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天钢拧,我揣著相機與錄音蟹漓,去河邊找鬼。 笑死源内,一個胖子當著我的面吹牛葡粒,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嗽交,長吁一口氣:“原來是場噩夢啊……” “哼伯铣!你這毒婦竟也來了?” 一聲冷哼從身側響起轮纫,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤腔寡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后掌唾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體放前,經...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年糯彬,在試婚紗的時候發(fā)現(xiàn)自己被綠了凭语。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡撩扒,死狀恐怖似扔,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情搓谆,我是刑警寧澤炒辉,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站泉手,受9級特大地震影響黔寇,放射性物質發(fā)生泄漏。R本人自食惡果不足惜斩萌,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一缝裤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧颊郎,春花似錦憋飞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至猾编,卻和暖如春瘤睹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背答倡。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驴党,地道東北人瘪撇。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親倔既。 傳聞我的和親對象是個殘疾皇子恕曲,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內容