2018年3月25日 星期日

深度學習(7)--使用Tensorflow實現類VGG model 訓練Cifar10數據集


    繼上一篇我們使用Alexnet 模型來訓練Cifar10數據集,這次我們改用VGG16 模型來做訓練及預測。Cifar10的數據集可以從以下網址下載:
https://www.cs.toronto.edu/~kriz/cifar.html

     從本質上來看,VGGNet 是在更細的粒度上實現的AlexNet,他廣泛的使用非常小的卷積核架構去實現更深層次的卷積網路神經網路。在一定的程度上證實了,增加卷積神經網路的深度,增加更多的隱藏層和權重可以實現對識別的明顯改進。

    從VGGNet的結構上來說,與AlexNet並沒有太大的區別,只不過增加了更多隱藏層,VGG的參數較多調整範圍大,而最終生成的模型參數是AlexNet的3倍左右,VGGNet的模型圖如下圖所示:


<picture 1> VGGNet的模型圖 , citation: htpps://arxiv.org/pdf/1409.1556.pdf


2018年1月26日 星期五

機器學習(10)--訊息量、資訊熵(Information Entropy)

訊息量

        在資訊理論中,訊息量是有確定解釋並可以量化計算的,這裡提到的訊息量是一種資訊數量化,度量的規則。
        用科學公式性的方法去量化一段文字有多少資訊的想法,最早是由哈萊特(RVL Hartley)在1928年首先提出。他將消息數的對數(log)定義為訊息量。若信源有m種消息,且每個消息是以相等的可能性產生的,該信源的訊息量可表示如下:



        上述公式是一個以m為引數的對數函數,舉個具體的例子:
假設中國桌球隊與巴西桌球隊的男子單打比賽,注意它不存在平局的狀況,也就是說要麼中國桌球隊獲勝不然就是巴西桌球隊獲勝,這兩個就是已經所有可能發生的情形。只有兩種情形,在上述公式中即m=2,信源有兩種,即"中國隊獲勝巴西隊失敗"或是"巴西隊獲勝中國隊失敗"。將m=2帶入上述公式:

       訊息量為1,單位是bit。

2017年11月30日 星期四

Python(1)--下載Youtube影片成MP3



       本章節提供一Python 範例程式,使用youtube_dl套件可將Youtube影片聲音下載成MP3。
注意此程式只供學習Python使用,未涉及侵犯各youtube影片或音樂聲音的版權。
請使用者在使用此程式時,自行注意相關版權的使用條款。


底下是完整的Python +Qt5的source code 下載。
Python sample code 下載:

https://github.com/Ashing00/ytpmp3/blob/master/ytbmp3.py

底下是build好的執行檔,可以直接執行,不須python 環境。
https://drive.google.com/file/d/1RVPSHXBhVMLAgUXAuiFvbV9ZBmAD_DO4/view?usp=sharing

下圖是python程式執行時畫面(也可直接執行ytbmp3.exe),
首先到youtube上找到欲下載的網址,複製到位址列,再按下<下載>
即可將該youtube的聲音下載並轉成MP3.

注意,該程式需要配合FFmpeg 使用,可從底下網址下載
https://ffmpeg.zeranoe.com/builds/

解壓縮之後將/bin 裡的ffmpeg.exe/ffplay.exe/ffprobe.exe  放在跟執行程式的同一目錄下
才能轉成MP3喔。

當出現<Finish!> 表示轉換及下載已完成。


<程式執行畫面>


2017年8月25日 星期五

深度學習(6)--使用Tensorflow實現類AlexNet model 訓練Cifar10數據集



    繼上一篇我們使用Alexnet 模型來訓練MNIST 數據集,這次我們改用Cifar10數據集來做訓練及預測。Cifar10的數據集可以從以下網址下載:
https://www.cs.toronto.edu/~kriz/cifar.html

它總共包含60000張32x32 RGB彩色的圖案,前五個檔案各有10000張圖檔為訓練數據集,最後10000張為測試用數據集。該數據集分成10個類別,以數字編號0-9分別是

airplane        
automobile   
bird              
cat                
deer              
dog               
frog              
horse            
ship              
truck            


      首先,照慣例我會先練習如何讀進Cifar10數據集從原始的二位元檔案至Numpy的矩陣格式,以便後續處理,這樣也可以用matplotlib套件秀出原圖,這樣做的意義是,就像之前所做的手寫數字辨識練習,可以加入自行創建或收集的圖片再進行預測或訓練,就不會只限於原始的數據集。也就是說如果懂得如何將圖片轉成Numpy的矩陣格式,那麼我就可以使用這個圖片做訓練或預測。例如常見的OpenCV套件不僅可以做到將圖片轉成Numpy矩陣格式,並且可以做很多的效果預處理,如裁減、灰化、調整對比或大小等等。

     在Cifar10的數據集裡每一Row 包含的第一個byte為類別標籤,接下來的1024,1024,1024共3072(32x32x3)byte分別代表該圖R,G,B的數據。

     底下一範例程式,便是可以將原始的Cifar10二進位檔讀出,轉成Numpy矩陣資料格式後,
再用Matplotlib套件,便可還原出原始圖檔:
https://github.com/Ashing00/Cifar10/blob/master/read_cifar.py

效果如下圖所示,上面的數字為其對應的類別標籤。