2017年11月29日 星期三

Python Deep Learning 深學筆記 - Perceptron 盡磅


若是頭一擺來遮,建議先來踏話頭

請共教育部閩南語常用辭典開--咧,隨時會當查。


孤一个神經元到 XOR gate (Ek-Óo-ké) 就盡磅

XOR 是基本 Ló-tsik-ké 中較特別--ê。特別 ê 原因是欲kā伊做出來,無親像 AND gate, OR gate, NAND gate 遐爾簡單。這毋是干焦 Perceptron 本身 ê 問題,親像欲用電子電路來鬥出 XOR 嘛是較厚工。
咱先看 XOR gate ê 真值表 (Truth table):
XOR truth table
(From wikipeia)
InputOutput
AB
000
011
101
110
伊特別 ê 所在是: 干焦 A 佮 B 無仝,才會輸出 1。這種性質予做互斥.


咱這馬看用 Perception ê 數學表示式,欲按怎做出 XOR ?
y = 1 if (w1x1 + w2x2 ≦ θ)  
y = 0 if (w1x1 + w2x2 >  θ)

咱若是看 w1x1 + w2x2 其實是一个二元一次方程式,伊其實是共一咧平面,分做兩爿:

w1x1 + w2x2 = θ 就是彼條斜斜 ê 線, w1, w2 決定伊偌斜,θ 決定伊離 (0, 0) 偌遠。
若是 (x1, x2) 佇正手頂爿,伊的輸出 y = 1。若是佇倒手下爿,也就是藍色彼爿,就輸出 y = 0。
因為 x1, x2 嘛是干焦會是 0 抑是 1,所以 (x1, x2) 就是干焦有圖裡彼四點: (0, 0), (0, 1), (1, 0), (1, 1) ,對應著真值表 ê 四種 (A, B) 。
Or Gate

像頂懸彼咧圖 (0,1), (1,0), (1, 1) 是對應 OR gate, 你會始轉去看 OR gate  ê  真值表
咱調整 w1, w2, θ ,就是予伊踮這四 ê 點徙振動,下跤就是 AND Gate。

AND Gate

因為有無限濟條線,所以咱進前有講,有無限 ê w1, w2, θ  會當做 AND, OR, NAND。
到今,咱來激頭殼一咧,你敢有法度徙動這條線,來予 (0, 1) 和 (1, 0) 佇仝一爿,(0, 0) 和 (1, 1) 佇另外一爿? 兩爿田無交,水無流?

2017年11月12日 星期日

用 Python 來做分數運算

若是頭一擺來遮,建議先來踏話頭

請共教育部閩南語常用辭典開--咧,隨時會當查。

我佇教囡仔小學 ê 數學時,有時想欲驗算一遍。毋過,咱這馬雖然有計算機,毋過,伊無法度算分數, 拄好我佇耍 Python, 來揣看覓 Python 有法度做--無?

這 "分數" 毋是老師佇共學生拍分數,是二分一 (1/2),三分二(2/3) 這種分數。


參考文章: Dealing with fractions in Python


基礎

首先,咱愛 uì fractions 這咧 Module 共 Fraction 這个函式搝--入來:



from fractions import Fraction
Fraction 佇英文都是 "分數" ê 意思,  頭一咧參數是分子,第二个是分母,譬如講, 3/12 是寫做:
>>> Fraction(3, 12)
Fraction(1, 4)
Fraction(1, 4)。 1/4 是 3/12 化簡過來ê。

若欲看落去較直覺,也都是和數學寫的 3/12 較相仝,你嘛會使用:
>>> Fraction('3/12')
Fraction(1, 4)
你嘛會使共小數(佇電腦伊是用浮點數表示)成做分數:
>>> Fraction(2.5)
Fraction(5, 2)
雖然伊會自動共浮點數(float)轉換, 毋過驚有精差(電腦計算小數有伊的限制), 也是用單引號共伊挾起來較安全:
>>> Fraction('2.5')
Fraction(5, 2)
>>> Fraction(1.1)
Fraction(2476979795053773, 2251799813685248)
>>> Fraction('1.1')
Fraction(11, 10)

約分

咱若有看較斟酌--ê ,頂仔的例,伊會自動共分數約分,也就是共伊化做上簡單 ê 分數:
>>> Fraction(153, 272)
Fraction(9, 16)

通分

你若是共兩的分數加--起來抑是減--落去, 伊會自動通分:
>>> Fraction(1, 2) + Fraction(3, 4)
Fraction(5, 4)
按呢有讚--無? 閣較讚个是, 若是一个分數和整數相加--起來, 伊嘛會自動轉做分數: 
>>> Fraction(5, 16) + 3
Fraction(53, 16)

## 加 .0 佇後壁, 伊都共 3.0 當做浮點數囉!
>>> Fraction(5, 16) + 3.0
3.3125

賰的二元運算 (Binary Operations)

除了加,減,乘佮除嘛是會用得:
>>> Fraction(5, 16) - Fraction(1, 4)
Fraction(1, 16)
>>> Fraction(1, 16) * Fraction(3, 16)
Fraction(3, 256)
>>> Fraction(3, 16) / Fraction(1, 8)
Fraction(3, 2)

共分子抑是分母提出來

你若是干焦欲挃分子,會使用 .numerator 這个方法。若是分母, 用 .denomintor
>>> f = Fraction(221, 234) + Fraction(1, 2)
>>> f.numerator
13
>>> f.denominator
9

共假分數 (imprpoer fraction) 成做帶分數 (mixed numeral)

Fraction() 所算出來个結果,攏是分數,無論是真分數(proper fraction) 抑是假分數 (improper fraction),有時咱愛家己轉換:
>>> int(73/14)
5                   # 這是整數部分
>>> str(Fraction(73%14, 14))
'3/14'              # 這是分數部分


寫一咧小學生看有ê程式


當然,小學生按呢共in講可能嘛是傷複雜,你會用寫簡單 ê 函式來轉換:
from fractions import Fraction
def Frac(x):                    # 單純化簡
    return str(Fraction(x))

def FracOp(x, op, y):           # +, -, *, / 四種運算
    if op == '+':
        result = Fraction(x) + Fraction(y)
    elif op == '-':
        result = Fraction(x) - Fraction(y)
    elif op == '*':
        result = Fraction(x) * Fraction(y)
    elif op == '/':
        result = Fraction(x) / Fraction(y)


    return str(result)


def FracMix(x):                    # 共假分數成做帶分數
    num, dem = x.split('/')
    i = int(int(num)/int(dem))
    dem = Fraction(int(num)%int(dem), int(dem))
    return str(i)+'+'+str(dem)

咱來奕看覓:
>>> from myfrac import Frac,FracOp,FracMix
>>> FracMix('10/3')
'3+1/3'                        # 這是帶分數
>>> Frac('12/24')
'1/2'                           # 這是約分
>>> FracOp('12/24', '+', '3/9')   #這是加法,自動通分
'5/6'
>>> FracOp('12/24', '/', '3/9')   #這是除法
'3/2'
按呢看來, 都共數學式較sîng,都賰 Frac, FracOp, FracMix 三的函式來使用都好阿!

咱若是會共 jupyter 敆做伙使用,無定著是一種袂䆀 ê 教材呢,因為佇線頂,袂曉 python ê 人,干焦拍開網頁, 共事先準備好个稿掠入來,就會當用這三的函式阿,下一回來介紹 jupyter!

2017年11月8日 星期三

Python Deep Learning 深學筆記 - 用神經元的方式寫簡單 Logic


若是頭一擺來遮,建議先來踏話頭

請共教育部閩南語常用辭典開--咧,隨時會當查。

咱這馬了解 Perceptron 神經元,嘛了解簡單 ê AND,OR,NAND Lo-tsik。先來定義簡單 AND 函式:


def AND(x1, x2):
    w1, w2, theta = 0.5, 0.5, 0.7
    tmp = x1*w1 + x2*w2
    if tmp <= theta:
        return 0
    if tmp > theta:
        return 1

AND(0, 0)
AND(1, 0)
AND(0, 1)
AND(1, 1)

遮有一个寫好的程式 and.py

毋過,咱想欲利用 NumPy ê 陣列來運算,所以愛先共神經元的算式小改寫一咧:

y = 1 if (w1x1 + w2x2 ≦ θ) 
y = 0 if (w1x1 + w2x2  > θ)

和下跤ê仝款

y = 1 if (w1x1 + w2x2 - θ ≦ 0)  
y = 0 if (w1x1 + w2x2  - θ > 0 )

θ 咱共伊叫做 Pài-o-sù (Bias),正號抑是負號無差,是共負號提出來外口抑是囥佇符號裡爾爾。若共 (-θ) 用另一个符號 b 代表:

y = 1 if (w1x1 + w2x2 + b ≦ 0)  
y = 0 if (w1x1 + w2x2  + b > 0 )

咱這馬會使開始寫 NumPy 版 ê AND 函式: and2.py:

def AND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

AND(0, 0)
AND(1, 0)
AND(0, 1)
AND(1, 1)

你會問講 and.py 和 and2.py 是仝款 ê 程式,為啥物愛用 NumPy 來算咧? 這是因為未來,咱的程式會愈來愈複雜。若是這馬無先共 NumPy ê 基礎拍落,後擺會接載袂牢,毋但愈來愈僫寫,速度嘛會干焦龜佇趖咧。

紲落來是 nand.py:

import numpy as np
def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

print(NAND(0, 0))
print(NAND(1, 0))
print(NAND(0, 1))
print(NAND(1, 1))


or.py:

import numpy as np
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

print(OR(0, 0))
print(OR(1, 0))
print(OR(0, 1))
print(OR(1, 1))

咱會當看著,AND,OR, NAND 干焦差佇 w, b  ê 值無仝,也都是設定 Paì-o-sù (bias) 都好阿!







欲按怎佇 Linux/Ubuntu 頂仔安裝 Spotify 網路版



若是頭一擺來遮,尤其是對遮的文字感覺怪怪的人,請來踏話頭。。


最近阮兜加入 Spotify 家庭共享 Premium ê 會員。阮某佮阮囝是攏用手機仔佇聽音樂,毋過我規工上班都是用 Ubuntu Linux 佇做工課,也是裝一咧 Linux 版較方便。好佳哉,Spotify 官方網站都有提供 Linux ê 收聽程式,真貼心。

我這馬用的 Linux 是 Ubuntu 17.10 Art Aardvark 版本。拄好參考伊的 Spotify for Linux 都會振動:

# 1. 共 Spotify 簽過 ê 金鎖匙加入,小等咧咱愛用伊來檢查搝落來个包袱仔
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys BBEBDCB318AD50EC6865090613B00F1FD2C19886 0DF731E45CE24F27EEEB1450EFDC8610341D9410

# 2. 共 Spofity ê Repository (就是囥程式ê所在) 添入來
echo deb http://repository.spotify.com stable non-free | sudo tee /etc/apt/sources.list.d/spotify.list

# 3. 共咱電腦裡所知影ê程式名單換新个,都是共 Spotify 名添入
sudo apt-get update

# 4. 安裝 Spotify-client
sudo apt-get install spotify-client
裝好了後,佇 terminal 落 spotify,揤 ENTER,都會看著登入畫面:
這時共你的登入資料起入去,理論上就會用得。毋過,阮公司有迵過 Proxy 才連起哩外口ê網路,所以閣愛設 Proxy ê 資料,揤下爿 ê SETTINGS, 進入另外一咧畫面:



普通若是愛入來遮,Auto Detect 定著是失敗--ê。共伊換做 HTTP 抑是其他恁公司所用--ê,共 IP,Port 添予好,我是免 Username 佮 Password 啦,轉去頭一咧畫面登入都成功囉!





2017年11月1日 星期三

欲按怎予 Android 手機 ê Youtube 影片會用佇幕後搬?

若是頭一擺來遮,請來踏話頭

為啥乜有這个問題?

這是因為 Youtube 頂仔有真濟好个影片,有時陣咱干焦想欲聽歌,抑是聽課。譬如講佇開車的時目睭看頭前,抑是佇捷運頂仔,你耳機勾咧,搖搖擺擺。你無欲看螢幕。

毋過,現此時 ê Youtube 若開,就一定愛共螢幕嘛開咧。若螢幕禁--起來,聲嘛綴咧無--去。螢幕開咧有兩的䆀處: 首先是真了電。螢幕是真食電--ê。無佇看閣開--咧,電白白了--去。

第二,無細膩去磕著螢幕。因為這馬手機仔 ê 螢幕是控制手機仔上主要 ê 所在,若是一直開咧,無細膩磕著,有時是共音樂暫停。較嚴重是無細膩就磕袂著就敲一通電話出去。尤其是你佇坐捷運時,手機是囥佇落袋仔裏,身軀振動抑是和人相磅真四常。無,你只好用手攑牢牢較安全。

若是 Youtube 會用佇背景運行/幕後運行,這寡問題就解決阿。因為你會使共螢幕關起來,這時,閣省電,螢幕嘛無作用。

啥乜是幕後運行

佇 Android 系統內底,你佇螢幕看會著,號做 "桌面"(Desktop)。佇桌面運行,號做幕前運行(Foreground)。因為手機 ê 螢幕細,普通 APP ê 設計攏是: 一擺干焦會使有一咧 APP 會使佇咧幕前抑是桌面。若是你點一的新的 APP ê ICON, 共伊拍予開,伊就浮去桌面運行,原本佇桌面行--ê,就先暫停,猶原佇 RAM 裡,這就是走入去幕後舉例講,你開 Youtube,伊就走來幕前,這時你閣開 Chrome,Youtube 就暫停,影片嘛袂繼續。這時,Chrome 走前,Youtube 退入幕後(background)。
共螢幕禁起來,嘛是仝款概念: 所有會 APP 攏無佇幕前。

毋過,有一寡特別設計 ê APP in 會用得佇幕後運行。親像電話,電子批, LINE,facebook,因為按呢你才有法度收著上新 ê 訊息。這款你無看著嘛佇運行--ê,就號做<幕後運行>


欲按怎予 Youtbue 幕後運行

Youtube 這ê APP 是無支援幕後運行--ê。干焦若是付錢予 Google 才會使,另外嘛人寫有這種功能 ê APP 來趁錢。毋過,咱欲免錢 ê 方法。

上簡單就是安裝 firefox。毋過,毋是干焦裝起來,佇 firefox 起開 Youtube 就好,閣有一咧鋩角: 愛共  開啟桌面版網站 拍開,你若是揤 firefox 倒手爿ê頂懸,就會看著下跤這張圖:


這咧選項,是共 firefox 像桌面電腦按呢來開這咧網站,莫用網站為手機版準備 ê 資料。按呢生愛掠資料會較濟,手機仔處理起來會較慢。畫面嘛較歹看: 佇手機頂小小 ê 面頂爭一堆物佇內底。毋過,咱若是欲聽 Youtube 爾爾,這是免錢會好辦法!


踏話頭 - 我所用 ê 文字

[以下華語]
我所用的文字是台語文,簡單講,就是把台語用它專用的文字寫下來。什麼是台語專用的文字? 就是這些文字直接對應到台語的發音,不必經由其它語言的文字二次轉譯,比如:台語的 <不行/不可以/不要> 是 "毋通",但華語火星文會是 "嗯湯", "母湯",也有會講台語的人看到 "不行", 但是心裏唸 "毋通"。

這裏的 "毋通", 是教育部有標準唸法 m̄-thang, 而不是用華語發音直接唸, 各位可以去試聽看看: 請按我

用火星文來寫台語, 壞處很多. 如果本來會講台語的人, 看到可能會心一笑.  但不會講台語的人, 看到火星文不但唸不出來, 而且更會唸錯. 嘻嘻哈哈之後, 是學到一個詞, 但發音錯了, 也學到了對台語的不尊重的態度.

而台語漢字的好處, 是可以快速借由眼睛了解文意, 但對 <說> 和 <聽>  反而幫助不大. 因為漢字的台語音, 沒有另外特別去學, 去練, 去講, 去聽, 一般人腦中的 "想當然爾" 的音通常都是錯的, 或是有偏差的. 這是一方面華語音太強勢地植入我們腦中, 另一方面是台語音和華語音 <有關係又不完全一樣>, 反而造成台灣人的障礙與包伏, 不如外國人從零開始般沒有負擔.

也因為台語和華語 <有關係又不完全一樣>, 造成我們反而不願專門,專心,專業地好好把台語學回來!

因為使用漢字的緣故,而且當初在選字時, 也特別考量儘量避免距離一般人常識太遠, 所以即使你不懂台語,應該也可以看懂八九成。如果你有疑惑或想順便學學台語,可以參考以下台語資源,最好把 教育部閩南語常用辭典iTaigi 開著,邊看邊查。

台語文字有好幾套,目前較主流的漢字,台灣羅馬字,和白話字。我是以教育部定的漢字和台灣羅馬字為主,所以會比較常參考到以下資源:

[以下台語]
教育部閩南語常用辭典: 是這馬 ê 標準,簡稱 "教典"
iTaigi: 是較新,較活潑,互動式--ê。若到教典查無,就來遮試看覓。

想欲了解閣較濟,會使去:台語網路學習一指通,甚至去買這本 台語好日子 來看, 這是一本蓋讚 ê 台語入門冊。

,

若是欲自學, 線頂資源真正袂少, 有深有淺, 遮簡單囥幾个:

20分鐘學會曉讀寫台語文

佇 Linux 來看GPX 檔案

最近定定有戶外活動。使用𤆬路機 (GPS) 來記錄行過的路線。普通我記錄路線,攏是用手機仔抑是專門个𤆬路機,罕得用電腦來看。 毋過,"仙人拍鼓有時錯,跤步踏差啥人無"。有一擺我無細膩,袂記得共一擺活動的路線收煞起來,閣直接開始記錄下一擺的活動,按呢共幾落...