2015年12月17日 星期四

Deep Learning(深度學習) - 理解概念筆記 (一) : Dropout

內容皆為個人對於論文中的理解

如有理解錯誤歡迎一起討論,互相學習
--

Dropout是目前深度學習中最廣為使用的一種技巧

原始論文:
Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I., & Salakhutdinov, R. (2014). Dropout: A simple way to prevent neural networks from overfitting. The Journal of Machine Learning Research, 15(1), 1929-1958.

PDF連結

其目的為防止network的overfitting

其原理為透過丟棄network中的某些neuron來防止feature之間的合作(co-adaption)

當某些feature被丟棄後,network必須學會利用剩下的feature進行分類

由於每次都是隨機的丟棄,network必須學會利用剩餘的feature本身來進行分類

而非透過某幾個feature所形成特定行為來進行分類
---
會成功的原因是透過丟棄network中的某些neuron

每個mini-batch進入學習並且進行dropout後,都是在train原本network的某種sub-network

原本network就變成是這些sub-network的集合體(ensemble)

而test時不使用dropout,其結果是為這些sub-network之期望值,故network表現會變好

不使用dropout的話,可視為只訓練出一個network來進行classification
使用dropout的話,可視為訓練出很多個的sub-network來進行classification

其圖示概念如下圖 (手繪)




















---

dropout目前被視為一種強而有力來降低overfitting的方法
幾乎被用於目前可見的任何的深度學習模型
也implement於目前所有的deep learning toolbox裡
其實現非常的簡單
依據dropout rate建立一個mask
使用這個mask遮蓋forwarding data
 backward時也同樣遮蓋gradients使其不被update


2015年10月15日 星期四

Matlab中imshow()以及imagesc()的不同之處


matlab在畫圖時多會使用兩種function
現在終於搞懂他的不同以及相同之處....||

imshow() :

    呈現圖案時將以原始尺寸呈現並將圖案的色彩設定為 colormap gray(256)
    意指呈現灰階色彩,其值域[1 256]。

    如果圖案以int8型態輸入則其值域為[0 255]
                       double                                [0 1]

    如果以圖案以imshow(im)直接input的話
    會直接映射至色度

    如果以圖案以imshow(im,[min max])的話
    會以min映射至色度最小值,max映射至色度最大值

    如果以圖案以imshow(im,[])的話
    會以輸入圖案的最小值映射至色度最小值,圖案最大值映射至色度最大值


imagesc() :

     呈現圖案時將自動縮放置適當尺寸

     如果以圖案以imagesc(im)直接input的話
    會以輸入圖案的最小值映射至色度最小值,圖案最大值映射至色度最大值

    如果以圖案以imshow(im,[min max])的話
    會只呈現[min max]中的色度

    當設定 colormap gray 時 = colormap gray(64)
-----------------------------------------------------------------------
所以
當以下情形時,畫出來的灰階圖是一樣的
imshow(im,[]) = imagesc(im);colormap(gray(256))


以上~



2015年3月30日 星期一

Deep learning tool: Theano + pylearn2 + CUDA 一次成功

荒廢了好久,又開始拾起theano

因為matlab實在跑很久.....

以下是Window7 32bit 安裝

1. 前置安裝

    MingGW  請升級是最新 (4.8.1↑)
    GitHub for window

2.python 2.7 32bit 安裝

   請安裝 Anaconda
   載點: http://continuum.io/downloads

3.使用git 抓 Theano 與 pylearn 2  與 安裝

    Theano:
     git clone git://github.com/Theano/Theano.git
 
   安裝:

    進入 cmd
    cd至theano存放的資料夾
   指令
    python setup.py develop


   pylearn2:
   git clone git://github.com/lisa-lab/pylearn2.git

   安裝:

    進入 cmd
   cd至pylearn2存放的資料夾
   指令
    python setup.py develop

4. CUDA 6.5 安裝

  載點:
  https://developer.nvidia.com/cuda-toolkit-65

 當然要有符合的nVIDIA的顯卡才能跑..

5.設定檔

在 C:\[user_name]下加入 .theanorc.txt  其內容
-------無CUDA版------
[global]
openmp=False

[blas]
ldflags=

------有CUDA版-------
[global]
openmp=False

[blas]
ldflags=

[global]
device = gpu
floatX = float32

[nvcc]
flags=-LC:\Anaconda\libs
compiler_bindir=C:\Program Files\Microsoft Visual Studio 11.0\VC\bin  (請改成自己的VS版本)


6.環境變數 <- 重要

在PATH此環境變數加入
C:\Anaconda\;C:\Anaconda\Scripts;[你的路徑]\pylearn2\scripts;

新增PYTHONPATH環境變數
加入[你的路徑]\Theano;

新增PYLEARN2_DATA_PATH環境變數
加入 [DATA存放路徑]

新增PYLEARN2_VIEWER_COMMAND環境變數
加入%SystemRoot%\System32\rundll32.exe "%ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen

注意ImageView_Fullscreen 後面還有一個空白


------------------------------------

應該就可以跑PYLEARN2裡的各種測試.py了

沒資料自行下載

在pylearn2\pylearn2\scripts\datasets裡

有各種測資的download script

-----------------------------------