2016年11月24日 星期四

[Tensorflow] 資料可視化 - Tensorboard

一直被 Tensorboard 沒辦法顯示 graph 這件事情困擾

TensorFlow 官網也沒有一步步的圖文教學

後來在 youtube 上面找到對岸網友 周莫煩 的TensorFlow 資料可視化教學視頻

Tensorflow 14 Visualization Tensorboard 1 (neural network tutorials)

利用周莫煩提供的程式碼

加上下面這個視頻

TensorFlow Tutorial in Chinese 10:TensorBoard 可视化计算图谱

點選上排的Graph

就能夠顯示基本的神經網絡資料圖表了




我發現上禮拜一直沒有辦法顯示 DataFlow Graph 的原因了

其實很簡單

在前面的 Tensorflow 14 Visualization Tensorboard 1 (neural network tutorials) 這段影片中

10:41 也有提到這件事情

執行完程式之後

writer = tf.train.SummaryWriter("logs/", sess.graph) 這行程式碼會創造出一個 logs 資料夾

同時內含有 Tensorboard 所需要的資訊

如果終端機現在進入 logs 檔,並在終端機中輸入

tensorboard  --logdir="logs"

它已經在 logs 資料夾中,以至於讀不到logs資料夾中產生的紀錄檔

因此,回到資料夾的上一層

重新輸入

tensorboard  --logdir="logs"
它會給我們一個 https 的位址,將它輸入瀏覽器中,就能夠進入 Tensorboard 中

點選上排的 Graph 按鍵,即可得到 DataFlow Graph

(轉) TechOrange - 連續創辦 25 家公司,MIT 教授告訴大家最好的學術實踐就是創業

內文簡介:

對於只能夠存活在實驗室的技術,是不夠力的!

全文在此

"Robert Langer(鮑伯•蘭格)作為麻省理工(MIT)的教授,擁有全美最大的實驗室(實驗室人員超百人),每年 1000 多萬美元的研發經費,研發效率和產出極高。作為 MIT 為數不多的學院教授(Institute Professors,MIT 最高教授頭銜)之一,Robert Langer 實驗室以研究靶向藥物傳遞系統和組織工程學而出名,累計發表了 1200 多篇專業論文,申請過 900 多項專利,其中 400 多項已經授權。Robert Langer 自幼就很喜歡化學,在康乃爾大學和 MIT 拿了化工專業的學位,進入研究生院後利用自己的化學和化工背景,研究開發與生命健康有關聯和幫助的項目。早在 1991 年,年僅 43 歲的 Robert Langer 就獲得了美國三大科學院院士(美國科學院、美國工程院和醫學院)頭銜,獲得了包括 Charles Stark Draper 獎、Lemelson-MIT 獎和 Albany 醫學中心醫學與生物醫學研究大獎、日本京都獎等榮譽,一直活躍在 MIT 的化學工程系和生物工程系。Robert Langer 不僅學術做得好,而且很有商業頭腦。自從 1987 年起,他一口氣辦連辦 25 家新公司,多數是與他的學生和博士後共同創辦的生物技術公司及醫療器械公司。" 

視覺化呈現 MNIST

最近在用 mnist 這個手寫數字影像資料庫進行簡單的機器學習

官方提供了一個非常"視覺化"的博文教學

讓大家可以仔細體會一下這個資料庫

2016年11月23日 星期三

(轉)【机器学习】Logistic Regression 的前世今生(理论篇)

文章連結:http://blog.csdn.net/cyh_24/article/details/50359055

對岸這篇文章討論邏輯回歸分析理論,同時有 gif 圖讓讀者快速了解中間發生什麼事情

2016年11月22日 星期二

關於 Overfitting, Regularization 與 Dropout

Overfitting 過度擬合

overfitting 就像小考GJ,大考GG

根據台大電機系 李宏毅教授 的深度習課程 ML Lecture 1: Regression - Case Study

提到,如果今天算出來的回歸分析模型用在訓練資料的誤差總和(Error Sum)很小

(error = 實際減去預測的差值,即理論與現實的差距)

但是用在模型尚未看過的測試資料(想像成最終測試的大考),若誤差總和很大

表示預測的效果不佳,這個現象就叫做 overfitting

例如下圖中的橘色線,它的數值大小就是代表誤差大小

在第5組測資發生了誤差超大的現象


圖一(擷取自課程影片)


Regularization 

在這篇 Quora:What is regularization in machine learning? 的文章中
鄉民 Yassine Alouini 回答的最好。基本上Regularization的目的就是

避免 overfitting 發生的技巧


在原本的 loss function 中,額外加入紅色方框所框起來的 lamda 項

成為新的 loss function

lamda 項中的 wi 是把已經求出 model 的 wi 項加總起來,再乘以lamda 

但是為什麽希望 wi 比較小呢?

因為輸入項對於 loss function 比較不敏感,影響就會比較小!

但是不考慮 bias,因為bias 對於 loss function 本身的平滑程度沒有任何影響



圖二(擷取自課程影片)

當然,無限制的增加 lamda 大小並不會讓 loss function 無限制的變小

因為隨著 lamda越來越大,lamda 項對於 loss function 的影響會越來越大

圖三(擷取自課程影片)


Dropout

在資料樣本數較少的情況底下,為了避免過度擬合 overfitting 所使用的技巧


歷史背景

在 Hinton 於 2006 年提出打下深度學習基礎的重要論文中

所使用的神經網路是受限制玻茲曼機( Restricted Boltzmann Machine )

它使用到了 Dropout 的技巧,丟掉(drop)某些前一層的神經元的輸入

來避免 Overfitting,讓神經網路的層數能夠更上一層樓

概念上可以想像成,假設今天我們要設計一個深層的類神經網路

可以從文字特徵判斷這個生物是不是人

                     「human」的圖片搜尋結果

Dropout的概念可以想像成從目前有的資訊,擷取重要的核心骨幹部份

排除掉相異的部份

例如,同樣是人類,黃種人、黑人、白人的核心概念都是人這個種族

但是某些特徵只屬於特地膚色的,我們就將這些部份的資訊改忽略不考慮

不讓這些資訊在倒傳遞過程中改變神經網路中的權重

這樣,深層的類神經網路就能夠專注的判斷這些測試資料是不是人

而不會被枝微末節的資訊所影響


這篇博文有個簡單的解釋 Deep learning:四十一(Dropout简单理解) 

原始論文在此,方便自己以後查閱
Srivastava, Nitish, et al. "Dropout: a simple way to prevent neural networks from overfitting." Journal of Machine Learning Research 15.1 (2014): 1929-1958.

講述受限制玻茲曼機相當清楚的論文: 张春霞, 受限波尔兹曼机简介

2016年11月21日 星期一

[名詞解釋] 交叉熵 - Cross Entropy

在練習 Tensorflow 的程式的時候,看到了一個一直出現的名詞 - 交叉熵

以前在學熱力學的時候從來沒有搞懂什麼是熵

現在它又回來騷擾我了

為了避免它的騷擾

我覺得正面迎戰它

這篇對岸同胞寫的博文 以及 Tensorflow 官網上推薦的這篇博文

用清楚、圖片說明的方式讓大家能夠理解資訊領域中熵、交叉熵的意思是什麼


2016年11月17日 星期四

(後續暫停)[Udacity - Deep Learning] Assignment 1

Udacity - Deep Learning - Assignment 1

任務一


第一份指定作業的第一個任務只有要大家顯示某張圖庫中的影像而已

這邊基本上跟Tensorflow的部份關係還不大

透過討論區的這篇文章( Assignment 1 problem 1 Image display),將第一個任務給解出來

程式碼如下:

import matplotlib.image as mpimg
import pylab as plt

img = mpimg.imread('Q0NXaWxkV29yZHMtQm9sZEl0YWxpYy50dGY=.png')
plt.imshow(img)
plt.show()

目前遇到一個問題是 %matplotlib inline 這行一直顯示語法錯誤

在 stackoverflow 找到這篇  python SyntaxError: invalid syntax %matplotlib inline

才知道要在特定的環境進行編譯才可以編譯...XD

if you are not using Jupyter IPython notebook, just comment out (or delete) the line, everything will work fine and a separate plot window will be opened if you are running your python script from the console.

但是解決了之後,我顯示的圖案會變成奇怪的顏色(colormap選錯了)

後來在 stackoverflow 上找了一下

原來是因為 plt.imshow() 預設是顯示彩色的colormap

如果輸入的影像是灰階影像

程式會自動幫忙套色,因此最後會顯示出彩色的影像

將程式碼改成:

plt.imshow(img,cmap='gray')
即可

任務二

題意不清楚,後續先暫停,直接以 TensorFlow 的教學練習

2016年11月6日 星期日

[Python] 基本常識

學習課程 - codecademy 中的 Python 課程

基礎

如何列印包含英文字母(字串)以及數字在同一行中

如何去除字串中的空格

邏輯運算子(Logic Operator)

如何使用 AND 與 OR 運算子

函式(functions)

迴圈(Loops)

類別(Classes)

Q : python中的 self 指的是什麼意思 ?
Ans:
1. 習慣上,我們把一個method的第一個參數叫做 self 。這只是一個習慣而已, self 這個名字對Python來說完全沒有什麼特殊的意義。(但是你要注意,如果你不用這一個習慣的話,對於某些讀你程式的Python程式設計師來說,也許你程式的可讀性就低了一點。 --- Python 教學文件 - 9. Class(類別)

2.  在函數中
def __init__(self, number, name):
    self.number = number
    self.name = name
    self.balance = 0
解釋1 : 第一個self參數代表建立的類別實例,在Python中,實例可操作的方法,第一個參數必須明確作為接受實例之用,慣例上取名為 self 名稱。  ---  定義類別

解釋2 : 而Python中就规定好了,函数的第一个参数,就必须是实例对象本身,并且建议,约定俗成,把其名字写为self --- 【整理】Python中:self和__init__的含义 + 为何要有self和__init__

Q : python中的"__init__" 指的是什麼意思 ?
Ans:
用來定義類別的實例建立之後,要進行的初始化動作

def __init__(self, number, name):
    self.number = number
    self.name = name
    self.balance = 0
=>  __init__之後則可指定初始化時所必須給定的資料

資料結構

2016年11月4日 星期五

[Leetcode 難度:easy] 226. Invert Binary Tree using Python

目標:

補充資料結構的知識

這邊有一篇blog講 python data structure 的 tree  structure 部份講得蠻清楚的

此外,本篇可以用到的交換技巧 ( [Python] swap

在python中,兩個變數進行數值互換的語法可以寫成一行程式碼即可

a, b = b, a

這樣就不用另外創造一個新的函式來處理數據交換的事情


本篇的答案 (提示:Use recursion to invert tree.)





/* 載入prettify的autoloader */ /* 載入JQuery */