2017年9月30日 星期六

Python Deep Learning 深學筆記 - Perceptron 神經元

←前一篇     後一篇→

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

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

Perceptron (台羅: Pho-sep-ton)是 Rosenbltt 佇 1957 年提出 ê 演算法。是神經網路 ê 上基礎 ê 演算法。

啥物是 Perceptron

咱知影醫學 ê 研究, 人是予神經控制--ê,神經 ê 上基層,就是 Perceptron,號做 "神經元" 抑是 "節點" (Node)。科學家一直夢想,這寡逐个攏仝款 ê 神經元,自按呢共伊接--起來,連來連起,就會當造出會思想 ê 人類。咱若會當做出人造 ê 神經元,毋著會使做出和人仝款巧 ê 機器人?

佇神經網路,抑是深度學習 ê Perceptron,就是設計出一咧模型,來共神經元的機制,轉做電腦科學會當處理--ê。電腦科學上基礎个是 AND,OR, NOT,NOR 這寡理路閘(tsa̍h)。佇遮定義 ê Perceptron,就是咱人所了解 ê 神經元原理,成做理路閘

正經 ê 神經元,是傳電流。軟體 ê 神經元,是傳 0 抑是 1。0 就是擋佇遮,無傳。1 就是向下傳--落去。予咱先看這咧圖:



伊是一咧兩的輸入 ê Perceptron。x1 和 x2 是輸入,w1 和 w2 是權重(weight)。圓箍仔是神經元,抑是節(tsat)點 (英文: Node)。x1,x2,y  都是神經元。

訊號佇傳入去一咧神經元 ê 時,是共捒--入來个訊號,共伊乘上權重,才全部加起來。若是超過一咧值,就輸出 1,無就輸出 0。這咧值,咱用 θ 表示:


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

你會使共權重想做是電子學內底 ê 電阻,伊對神經 ê 訊號流動,有蓋重要 ê 影響。



2017年9月27日 星期三

Python 進一步 - 類 Class 和物件 Object


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

這篇是用台語文寫--ê,若是有一寡詞看無,請來遮掀字典: 臺灣閩南語常用辭典


類 (Class), 物件 (Object), 和 Oó-óo-phi (OOP)

佇開始講 Python ê class 進前,咱先介紹類(class)和物件(object) 佇程式設計歷史上 ê 意義。當然,你若是無興趣,嘛是會當躘過這段古。毋過,我是感覺了解這段你會對 class ê 使用有較清楚 ê 了解。
物件毋是 Python 孤有ê物。伊是用來支援一種設計程式 ê 經典方式: OOP (Object-Oriented Programming,台羅: óo-óo-phi)。

OOP 是超越程式語言之上 ê 一種程式設計 ê 典範 (Paradigm)。

簡單講,就是佇程式愈來愈大,若來若複雜,就有人開始思考,研究欲按怎寫才會予程式會當濟人合作,應付複雜 ê 需求,穩定閣好用咧? 經過一寡研究,就歸納出愛共程序( Procedural) 思考,轉做物件 (Object) ê思考ê 頭殼。

若毋是捌佇咧古早 ê 環境中寫程式,可能僫體會這咧改變有偌關鍵。就干焦現此時出世 ê 囡仔無法度體會無民主 ê 戒嚴時代。民主對in 來講就干焦空氣遐爾仔自然。現此時 ê 人寫程式, OOP 嘛是無所不在。 你這馬當佇學 ê Python,本底就是用 OOP ê 範去設計出來--ê。
Python ê 使用者,就是徛佇 OOP 頂仔。

Python 裡 ê 類 (Class, 嘛會當音譯: Ku-la-su),就是用來支援 OOP ê 型態。

uì Class 造出來 ê,抑是生出來 ê 實體 ê 物,就號做物件 (Object)。咱會使共 Class 想做仔,用粿共紅龜粿一塊一塊印出來,紅龜粿就是物件(Object)。正經佇 Python 內底走跳--ê 是 Object,Class 只是咱用來雕刻出 object ê 型。

聽甲霧嗄嗄? 咱就來用一个例來簡單解說。


設計動物園 - 簡單想一咧

準講咱欲來設計一咧動物園,欲按怎開始咧? 咱先看欲按怎管理動物。
這間動物園一開始tsh,獅,開始。獅有四枝跤,普通是黃色--ê。
lion_legs = 4
lion_color = 'yellow'

看來袂䆀。
閣徙落來,你想欲添另外一隻動物,雞,
chicken_legs = 4
chicken_color = 'black'

你一聲就會感覺按呢寫毋是勢,一咧動物加兩的變數,若動物愈來愈濟,你毋就變數一直添落去? 這時,你想著會當用進前學過 ê 名單:

lion = [ 4, 'meat' ]
chicken = [ 2, 'rice' ]

頭一咧欄位是跤ê數目,第二是食物。這馬,咱動物園內底有 5 隻獅, 十隻雞,攏總幾枝跤? 咱會相欲定一咧函數來算,佇算進前,愛先定一咧名單來共所有 ê  動物囥入去,咱會按呢寫:

# five lions
for i in range(1, 6):
animals.append(lion)
# ten chicken
animals.append(chicken)
for i in range(1, 10):
count_legs(animals)

 按呢看起來袂䆀,會曉用名單來共整理一咧,咱共這咧算跤 ê 程式,寫做一咧函式:

def count_legs(animals):
s = 0
for one in animals:
s = s + one[0]
print(s)

紲落來,你可能開始寫真濟無仝的函式,來算動物食偌濟,啥物色,。。。。,所有咱會閣有濟濟函式:

def count_food(animals):
def count_color(animals):
def can_fly(animal):
...
def can_swim(animal):

佇頂仔的例中方(tiőng),咱會曉用名單(lists)來共一款動物的性質抾做伙,是真好的改進。無干焦 lion_leg,lion_food,lion_color,...,咱就愛起造袂少的變數來予 Lion 用。這寡變數是互相獨立,咱是靠伊的名裡的 lion 來了解in攏是獅仔个。按呢會予人感覺散ia̍h-ia̍h,你愛會記逐个和 lion 有關係的變數。

用名單(Lists)就加真好,當然,Python 有閣較好用的資料型態,親像字典(Dictionary)。毋過咱共伊斟酌看一咧: 閣較按怎設計,都是函式和欲處理的資料是分開--ê。

設計動物園 - 物件為中心

其實, OOP 是和咱人認識世界ê方法真sîng。咱一想著一隻狗,就會聯想著伊有毛,四支跤,會走,啥物花色。咱一想著鳥仔,就會想著伊會飛,有羽毛,兩支跤。魚仔會泅水,無跤,有翅。雖然逐種動物千變萬化。毋過,in ê 特色袂差真濟,例外真少,因為咱人生來就會曉分類。Python ê Class 就是提供予咱分類 ê 工具。

欲按怎用咧,咱先內定義一咧 Animial 類:
class TheAnimal():
can_move = True
def __init__(self, name, color, legs):
self.name = name
self.legs = legs
self.color = color

 以  class 關鍵字𤆬頭,後壁硩 class 名。
Class ê 名, 佇 Python ê 慣勢,逐字合起來,每一个字ê頭一咧字母大寫。
can_move 號做 class ê 性質 (attribute)。伊是一咧變數,只不過伊是 TheAnmial 个。咱共逐个動物攏有个,仝款 ê 特色囥佇 TheAnimal ê 性質。佇遮咱認為動物和植物抑是無生物上大ê差別是: 伊會振動。這是所有動物共通--ê,你會當親像普通變數仝款使用伊:

>>> TheAnimal().can_move
>>> True

咱先用這个類來 "生", 抑是創作幾隻動物:

lion1 = TheAnimal('lion', 'brown', 4)
lion2 = TheAnimal(''lion', 'white', 4)
chicken = TheAnimal('chicken', 'yellow', 2)

佇頂仔三的運算式,就是 uì 類來起造三的物件 (object)。

動物是虛--ê (abstract),抑是講抽象ê 分類。lion1,lion2,chicken 才是真正 ê 生物,佇程式裡號做物件(object)。

物件和生物仝款,有伊的生死。生就是伊開始存在程式中(當然, 計算機科學 ê 定義閣較嚴格是占用記憶體)。死就是伊無佇這咧程式阿。生物件出來,專業名詞是 instantsiation。物件 (object) 嘛號做實體(instance)。

def __init__(self, name, color, legs)  函式是 TheAnimal() 建構式 (Constructor),也就是佇咧生一隻動物的時,一定會呼著 ê 函式。咱佇生的時,順紲共伊的 attributes 指定--落去。咱佇生物件的時落ê參數,就是欲予 __init__() 會參數。

咱佇生物件的時,指定伊的一寡性質: 佗一種動物 (lion, chicken),色緻 (brown, white, yellow),幾支跤。所以 lion2 這个變數代表 ê 就是 "一隻白色,四支跤 ê獅仔"。

物件生落來了後,才想欲知影伊的性質,嘛是親像變數仝款:

print(lion1.name) # 'lion'
print(chicken.legs) # 2

類 ê 變數和實體 ê 變數

咱有注意著無?  __init__(self,...) 第一个參數是 self。佇 class ê 所有方法 (method,也就是函式,佇咧 class 裡咱叫做 method), 一定愛是 self。伊是一咧特別 ê 參數,代表物件伊家己。lion1 伊家己就是 lion1lion2 伊家己就是 lion2。按呢毋是廢話? 咱和一開始看著 ê can_move 比較,就知影伊的奇巧佇佗位。

can_move類 ê 變數

__init__(self, ...) 內底,self.nameself.colrself.legs 攏是實體 ê 變數

類 ê 變數,是類生來就有 ê 性質。以咱的動物來講,咱定義所有動物就是會振動,這是就算咱人猶未發現 ê 物種, 毋知名--ê,攏是按呢。
實體 ê 變數,就有各種動物無仝 ê 變化,伊是這咧實體家己--ê,捌的實體無一定佮伊仝款。lion 四跤,chicken 兩跤。平平 lion,lion1 咖啡色,lion2 白色。所以

lion1.can_move # True, 合法, 實體是 TheAnimal 類
chicken.can_move # True 合法, 實體是 TheAnimal 類
TheAnimal().can_move # True,合法。can_move 是類 ê 變數
TheAnimal().legs # 無合法, legs 是實體 ê 變數

重寫動物園


定義了後,咱重寫動物園和算跤數ê程式:

class TheAnimal():
can_move = True
def __init__(self, name, color, legs):
self.name = name
self.legs = legs
self.color = color def legs(self):
legs = 0
return self.legs def count_legs(animals): for i in animals:
## The lion attributes
legs = legs + i.legs return legs animals=[] lion = TheAnimal('lion', 'yellow', 4)
animals.append(lion)
## the duck attributes chicken = TheAnimal('chicken', 'white', 2) # five lions for i in range(1, 6): # ten chicken
print(count_legs(animals))
for i in range(1, 10): animals.append(chicken)

你會感覺這種寫法,加真媠氣。雖然無一定較少 coding。這種方式是較費時間佇一開始 ê 定義。等到後壁,你會感覺 code 真清氣,真清楚。因為伊共和物件有關係 ê 性質,攏抾做伙佇物件--裡,你免煩惱落--去。

閣進一步,連一寡函式,嘛會使整入去 class 內底,只要伊是這咧 class 特別有,抑是實體特有--ê,我就無閣寫實例,干焦寫一咧殼來意思意思,你會當家己思考欲按怎共肉添入去


class TheAnimal():
can_move = True
def __init__(self, name, color, legs):
self.name = name
self.legs = legs
self.color = color
def can_fly(self, ...):
def can_run(self, ...): ... ...
def run(self, ...):
def can_swim(self, ...): ZZZZ ... def fly(self, ...:
some_animal.fly()
... def swim(self, ..): if some_animal.can_fly():
some_animal.run()
if some_animal.can_run():

咱的感覺,變數是性質,函式是動作,是行為。逐種動物有伊特別 ê 運動方式。佇 Procedural 方式,行為佮性質是分開。佇 OOP 裡,連行為攏整做伙。

當然,佇遮咱會介紹真粗淺,毋過有夠有咱了解 OOB ê 基本概念和 Python class ê 用法。

2017年9月17日 星期日

Black Hat Python - 烏帽仔 Python 踏話頭

這篇和規个系列,攏是用教育部 ê 標準用字,若是有詞毋知意思,抑是按怎發音,會用共伊 copy 起來去教典 ê 線頂辭典查:

教育部閩南語辭典 (後面簡稱教典)
iTaigi: 若教典查無,來遮查看māi。

Justin Seitz 所寫的 Black Hat Python,臺灣是碁峯出版 ê "黑帽Python"。 規本我都讀了--阿。內底 ê 例,我嘛攏奕過一斗。閣進一步,我攏共咧改做 Python3,而且改做 class/object ê 型。
為啥乜欲加夯這咧枷? 這方面是趣味,這方面嘛是予家己有機會激頭殼一咧。

Python3 是未來 ê 趨勢。雖然目前 Python 2 閣有大量 ê 資源是 Python3 無法度取代 ê,這本書就是一例: 伊是用 Python 2 寫个。毋過,咱學物件是看未來。而且,借這咧機會了解 Python3 和  Python2 無仝 ê 所在,嘛對咱了解 Python2/Python3 這咧語言有幫助。橫直我學 Python 是興趣,是自學,無公司客戶 ê 壓力。毋過,若干焦看過,共書頂仔例拍拍咧,無予家己一寡挑戰來激頭殼,嘛連鞭袂記--得。所以我寫這个系列,就是一方面複習,一方面試看覓使用台語來寫。

我頭一擺寫的例,有想欲予 Python2 / Python3 攏會用(i̋ng) 行。毋過,我感覺按呢可能會予看的人分心,加麻煩,考慮共伊提挕捒。

我共書--裡所有的例,攏改做 class/object,台語我翻做類/物件(luī/mih-kiānn)。這會當講是我家己 ê 癖: 因為我總是想著程式,未來欲繼續發展,欲予人使用,愛按怎包裝較好。實際上,當然是我家己才會使用我家己 ê 程式。毋過這種 uì 寫 C 程式都有 ê 癖,嘛帶來到 Python這爿。所以,我佮 ê 例,和原本書頂仔ê無仝,有真濟攏是這種 class 方式ê,所以,我會先介紹 class ê 觀念和使用。

2017年9月12日 星期二

Python Deep Learning 深學筆記 - Matplotlib


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

佇咧深學 ê 過程中(tiőng),會當資料用目睭 gió--一咧知影重點佇佗位,是一件真媠氣也真重要ê 代誌畫圖資料成做圖 ê 工具就真重要。Matplotlib 就是按呢一咧工具。

簡單 ê 圖

咱先來一个例: matplotlib-sin.py:


import numpy as np
import matplotlib.pyplot as plt

是共 numpy,matplotlib 的 pyplot --入來咱的程式內。

x = np.arange(0, 6, 0.1)
y = np.sin(x)

np.arange(0, 6, 0.1) 是產生一个 0 開始,  到 6 結束,逐个數字差 0.1。就是 0, 0.1,0.2,0.3,...,5.9。這是一咧 60 ê 元素 ê 陣列。
咱佇幾何學(kuí-hô-ha̍k) 學--過,y = sin(x) 就會使畫出一咧 sin 。佇遮咱產生一咧 60 點 ê x ,也就是 x array,佇 np.sin() 裡,伊嘛是產生一咧 60 點 ê  y array。

--落來,咱共這兩的 array 交 plt 共咱畫--出來:

plt.plot(x, y)
plt.show()

愛注意: plt.show() 才會正經畫出圖。



pyplot 閣進一步 ê 能力

pyplot 真gâu,伊會曉 ê 畫圖工夫真,咱干焦介紹上簡單,咱用會著 ê 技巧--落來,咱學欲按怎圖,佮文字註解佇咧圖頂。

這咧例佇遮: matplotlib-sincos.py

頭前仝款,uì 這開始:

y1 = np.sin(x)
y2 = np.cos(x)

### 畫圖表
plt.plot(x, y1, label="sin")

這馬有兩的圖,咱有 y1,y2 分別代表 sin,cos。
佇 plt.plot 畫 y1 時,咱一咧參數來指定標籤 (label),也就是 y1 踮圖頂仔 ê 名。

### 予 cos 圖和 sin 無仝, 用短線節
plt.plot(x, y2, linestyle = "--", label="cos")

畫 y2 ê 時, 咱閣看著另一咧參數 linestyle,這是指定用啥物樣式來畫圖,佇遮咱用短線節。

## x 標
plt.xlabel("x axis")
# y 標 
plt.ylabel("y axis")
# 主題
plt.title("sin kah cos")

遮是設定 x (註 1) 和 y ê 名,就是你佇橫杆下跤,和 y 倒手爿看會著。閣有主題佇上頂懸

plt.legend()
plt.show()

Legend 是 pyplot ê 容器 (container),用來處理畫圖,杆 ê 類 (class)。基本上,GUI (台羅: kú-ì) ê 設計是真複雜 ê 代誌。咱佇遮先使用,後擺有閒我有研究才來寫落來。

落尾,咱就來看運行ê結果:


註 1: axis,華語翻做 "軸"。毋過,佇台語 "軸" 有查著 ti̍k  這咧念法,毋知意思。
佇台日大辭典查著ê意思是長布條ê弔文。意思嘛無合,遮我暫時用,感覺較合!




Python Deep Learning 深學筆記 - 一肩擔雞雙頭啼

下一篇

這篇系列, 是我讀 

Deep Learning|用Python進行深度學習的基礎理論實作 


ê 筆記. 伊的原文是日本人寫个.

我那看那耍伊的例, 家己寫乎伊行看覓. 若是有啥物想法, 就那寫那奕看覓, 順紲 kā 心得寫落來.

一肩擔雞雙頭啼


用台語寫 Python, 台語是人類語言, Python 是程式語言. 用語言寫語言, 是一種浪漫, 予母語直接和機器語言對話.

Python 是我佮意 ê 程式語言. Deep Learning 最近真衝, 我想欲了解看覓. 所以我用我佮意 ê 語言學 Deep Learning.

台語是我 ê 族語(抑是母語), 是我佮意个, 所以我用台語來寫 "用 Python 學 Deep Learning"!

毋過, Python/Deep Learning 攏毋是我欲賺食 ê 家私. 單純是興趣, 好耍, 做議量. 所以我揀這本uì原理開始講个書. 若是你干焦想欲利用現成 ê Deep Learning 工具, 可能愛去揣 Google ê Tensorflow 按怎用个書較實在.

我本身是慣 C, 是寫 embedded system.

往過咧做工課的時, 拄著啥乜語言, C/Java/C++/Python/Perl/TCL/Bash..., 甚至 Assembly, 我是便若拄著, 若工課有需要就學. 就算毋是真輾轉, 至少看有人佇寫啥物, 你就會當入去彼个語言 ê 世界, 去看第一手个資料.

我袂去佮人去諍講佗一種語言比佗一種語言較好. 因為我毋是逐種語言攏用甲做仙, 有到彼loh坎站去比較逐種語言 ê 好䆀. 當然, 我嘛毋是逐種語言攏學佮真老(láu). 有个目睭瞌瞌嘛寫會出來. 有个小啖一个, 愛定定查書來參考, kā 工課 ê 問題解決就囥--咧. 總是, 我袂執著, 嘛袂排斥我袂曉的物件.

但是我確實感覺無仝 ê 程式語言, 有無仝 ê 設計哲學, 使用 ê 社群嘛有 in 無仝 ê 文化. 愛耍 Perl ê 人就較自由自在, 愛耍 Python ê 人就較愛屧貼.

總是, 你佮意一種語言, 有心, 你就使用, 就去發展, 就去貢獻, 免開時間去批評捌个語言, 特別是你嘛無蓋熟 ê 語言.


凡勢這種態度, 影響著我對台語文的態度. 頭一擺知影台文這項物件, 我是感覺好奇, 趣味:

"原來台語是會使寫, 我哪會攏毋知?"

"寫出來个和我喙講的攏仝款呢?"

"這就是我手寫我口"


我真歡喜有一種工具, 會使 "原汁原味" 共我喙講个, 阮爸母, 阮阿公阿媽个話寫落來.

欲寫好程式就是看書, 上課, 閣來就是家己愛寫愛練習. 加去看寫程式老手 in ê 作品, 有袂曉个就問人. 我嘛是按呢生佇學台語文! 當然, 和程式語言比--起來, 人講个話你閣愛加講加聽, 才有法度輪轉.

毋過, 大部份台語人較欠缺 ê 能力, 是 "讀" 和 "寫", 會當講台語人 99% 是文盲.
我到 40 偌歲, 才敢講我毋是台語文盲.

這的系列, 就是我練習寫台語文, 仝時間練習 Python, 才閣用 Python 學 Deep Learning ê 工課, 用一句真媠ê臺灣俗語就是: "一肩擔雞雙頭啼".


Deep Learning 台語欲按怎寫


Deep Learning, 普通華語翻做 "深度學習". 我是感覺嘛無一定要鬥四字. Deep 就是 "深", Learning 就是 "學", 深學(tshim-hak, tshim-o̍h)就會用的得. 誰叫我是頭一个用台語寫 Deep Learning 咧? 我是真歡迎有人閣用台語寫科技文章來相輸啦!

是用英文, 抑是台語來寫學術名詞

這對我來講, 是一个真僫選擇个問題. 因為自較早我佇學資訊科學, 完全使用華語个時陣, 阮這个行業, 嘛是慣勢真接用英文原文.

這當然是因為咱自細漢就學英文. 進入高中大學, 甚至攏是讀原文冊. 無論你發音有準無準, 彼 26 字母鬥起來个字你總是看有. 會曉念就念, 袂曉嘛會使字母一字一字念. 念毋著你个同事聽有就好. 譬如講, 我一个同事攏共 GNOME 念做 tsi-nóo-mi, 我一開始嘛捎無. 後來伊一直使用, 我嘛硩咧講. 一直到予阮某黜臭, 才斟酌去查伊量其約是念 gu-no-mu.

講誠實个, 就算佇華語个翻譯, 較早一个足出名个人叫侯捷. 伊个資訊書翻譯甲真好嘛真濟, 算是權威. 我會記得, 伊捌佇一本書裡討論這个問題. 因為嘛有袂少人問伊講: 為啥乜欲保留英文, bua̋i總用中文?

我印象中, 伊的結論嘛是盡量寫原文. 我若有揣出來才共伊補起哩!

因為學術名詞變化真濟也真緊: 有完整个講法, 譬如講 Central Process Unit, 紲落來閣有縮短做 CPU. 有个縮短寫是直接字母一字一字念, 有个縮寫了後閣有伊另外的發音. 以出名个 GNU(全文是  GNU's Not Unix) 來講, 標準念法干焦是 gu-niu, 有時名詞接接咧, 傷長了後閣再縮寫, 有時伊毋是英文, 是其他種語言親像法文抑是德文來个.

若是發音對應, 這是大工程.

若是干焦字母 ê 念法, 親像 a, b, c, ..z, 我是感覺這愛官方規定一个標準音譯. 愛提醒一个觀念: 這毋是欲學英文, 這規定毋是予你用台語學英文, 予你英文gâu. 這是欲按怎吸收英文个詞來成做台語个外來語!

這馬我是佇咧實驗, 較自由. 所以有可能一開始寫用這款, 後來用捌款. 基本上, 我較佮意用 "音譯", 用台語的發音系統儘量去倚 in 原來个發音.

現此時日本 in 就是按呢做个. 日文的 computer 就是 コンピューター, uì computer 來个, 美國抑是英國人聽無 コンピューター, 毋過日本人攏聽有, 看有, 日本人感覺音有倚原文, 按呢有合用都好矣!

因為這寡智識, 攏是新个, 嘛是攏uì外國來个, 咱台語本底就無這寡物件. 當然你會使揣意思相倚个古早詞來代替, 轉換. 毋閣, 佇新个領域, 這攏愛重新定義名詞, 抑是發明新名詞. 若是那呢, 規氣用音譯毋是閣較好咧? 雖然外國人聽無, 毋過咱个人知影伊和原文个音有相倚.

當然, 台語無法度, 嘛無應該和英文發音仝款, 咱愛揣和伊較倚, 毋過彼是台語个發音系統. 這佇逐个攏自細漢學英文个臺灣顛倒困難. 譬如講: B, 若是我會念 pi. 若是阮老爸, 我感覺伊會念 bi. 總是, 這其實只要台語專家定出來, 逐个就會當照做就好阿!

當然, 若是現此時个華語翻譯, 若是伊予人使用佮真普遍, 而且共伊捎來做台語詞嘛袂怪怪, 就直接 kā 伊借來嘛會使, 這嘛是真緊楦闊台語詞類 ê 方法!

用漢字抑是羅馬字

若是我的看法, 若毋是華語詞真普遍, 就用羅馬字都好阿.

有時硬欲揣漢字是無意義个. 請問: A, B, C 欲揣佗一个漢字來代表咧? Gnome 英文意義是 "地精", 出名的 Gnome Desktop 是唸 "地精桌面" 好? 抑是 gu-no-mu 桌面好?

意譯, 有時真僫揣, 厚工. 有時只是相倚, 顛倒予人 "望文生義", 和古早意思相濫. 舉一个例就是 "法治". 現代 "法治國家" 的意義實在是和古書寫的 "法治" 意義無仝. 毋過, 一直到今, 閣有人認為古早中國人就有現代法治國家思想.

當然, 有時揣著音意攏合的漢字嘛是真媠的代誌. 重點是定定使用, 就有可能生出袂䆀个漢字詞.

莫想講一聲就欲 <定於一尊>. 就算是英文, 同一个物件伊嘛定定有幾落種名.  就親像 computer, 嘛有人講 desktop. Notebook 嘛另外閣有 laptop, handheld 和 mobile 攏是手機仔. in 會使濟个名詞指仝一个物件, 予伊自然競爭, 咱嘛會使. Romantic 華語一開始是 "羅曼蒂克", 這馬是 "浪漫" 時行.

有無仝个用法, 無代表你會使用 "火星文". "羅曼蒂克" 抑是 "浪漫", 攏有伊的發展 ê 理路, 袂有人閣生出 "鑼慢蹄克" 這種講法!

定定使用台語來作任何代誌才是重要! 漢字抑是羅馬字攏是工具, 揀你佮意, 順手个工具就好.

2017年9月9日 星期六

欲按怎佇 Ubuntu zesty 安裝 avidemux

Avidemux 是一咧好用的影片編輯器。毋過,對 ubuntu 17.04 無收這咧包袱仔拄好佇網路著這咧文章,就來試看māi:

How-to Install the Latest Avidemux on Ubuntu 17.04 Zesty 32-64bit


1 先安裝 GetDeb 套件:
Ubuntu 無,愛先 uì GetDeb 網站--轉來,照伊 ê 這咧 install 網頁頂仔 ê 1.1 ê getdeb,揤正鈕,共伊--落來:


佇我現此時,儉--落來 ê 檔名是: getdeb-repository_0.1-1-getdeb1_all.deb

 terminal,用 dpkg 安裝 getdeb
$ sudo dpkg -i getdeb-repo*

3 你 ê repository 著時(up to date):

$ sudo apt update

4 安裝 avidemux

$ sudo apt install avidemux2.6-qt

佇第 3, 4 ê 步序,我个和參考彼咧英文版ê文章無仝,我是較慣勢用命令列 ê。另外,我無 GTK ê avidemux,干焦揣著 qt 版本。
另外,getdeb ê 網站干焦無夠定定有這種錯誤:

錯誤:11 http://archive.getdeb.net/ubuntu zesty-getdeb/apps amd64 libavidemux2.6 amd64 1:2.7.0-1~getdeb2~zesty                   
  在讀取伺服器時發生錯誤,遠端主機已關閉連線

我試幾落擺(kuí-lo̍h-pái)才成功。
有時,連 apt update 和安裝其他檔案嘛一直有問題。你若是感覺麻煩,嘛是會當:

$ sudo apt-get remove getdeb-repository


這馬,你會使試開 avidemux:





2017年9月6日 星期三

Python Deep Learning 深學筆記 - Numpy

前一篇  後一篇

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



陣列,矩陣,和 N 維陣列的觀念





陣列有 1, 2, ..., N 維陣列。數學共一維陣列號做向量 (ǹg-līong),二維陣列號做矩陣。向量抑是矩陣正規化了後,號做 Then-so(tensor,華語: 張量)。佇這本冊,二維陣列號做矩陣,三維以上號做Then-so抑是濟維陣列。


Numpy 是啥物?

Numpy 是一咧陣列 (numpy.array) 的 Module。因為咱踮深學會定定用著陣列(tin-lia̍t)抑是矩陣(kú-tīn)。

伊是利用 Python 來實作數學頂仔 ê Linear Algebra (線性代數/suànn-sìng-tāi-sòo) 上重要 ê 底蒂. Linear Algebra 又閣是統計, 資料科學 ê 底蒂伊共真濟陣列个工具攢佮真好勢. 咱愛共伊用佮熟手, 通好來學閣較深个物!

Numpy module 𤆬入來咱的程式真簡單:


>>> import numpy as np

產生陣列也蓋簡單, 就是共 Python 本成名單 (List), 用 np.array() 來共伊轉--過來:


>>> my_list = [1, 2, 3]
>>> arr = np.array(my_list)
>>> arr

伊的輸出是:


array([1, 2, 3])

你若斟酌看, 名單干焦是 [ 1, 2, 3]. array() 表示伊是 Numpy 个物件.
伊的預設型態是

>>> print(arr.dtype)
dtype('int64')


Numpy 拍底个方法 (Basic Methods)


Numpy 直接產生相連續的數列, 會使用 arange(start, stop):

>>> np.arange(0,10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(0,11,2)
array([ 0,  2,  4,  6,  8, 10])

若是有第三个參數, 是代表偌濟个才揀一个. 2 就是兩的揀一个.閣有另一个輕可方法來產生數列就是 linspace.



linspace

>>> np.linspace(0,10,10)
array([  0.        ,   1.11111111,   2.22222222,   3.33333333,
         4.44444444,   5.55555556,   6.66666667,   7.77777778,
         8.88888889,  10.        ])

arange 無仝ê所在是: 第三的參數是指定欲產生幾个數字, 毋是欲躘偌濟, linspace 自動算出數字中方个距離.


0 陣列 (zeros):

>> np.zeros(3)
array(0., 0., 0.])
>> np.zeros((3,3))
array([[ 0.,  0.,  0.],
          [ 0.,  0.,  0.],
          [ 0.,  0.,  0.]])


1 陣列 (ones):

>> np.ones(3)
array(1., 1., 1.])
>> np.zeros((3,3))
array([[ 1.,  1.,  1.],
          [ 1.,  1.,  1.],
          [ 1.,  1.,  1.]])



目睭陣列 (eye, identity matrix)


>>> np.eye(3)
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])

亂數陣列

有幾落款个亂數函式. 予你真簡單就會當生亂數陣列出來:
>>> np.random.rand(3) 
array([ 0.04513197,  0.0986391 ,  0.88126089])

>>> np.random.rand(2,2)
array([[ 0.02991544,  0.04311185],
       [ 0.51475763,  0.59982047]])

>>> np.random.randn(3)
array([ 0.91825285, -0.05281746, -0.45268078])

>>> np.random.randint(1,100,10)
array([49, 72,  2, 94, 26, 53, 97, 51, 87, 64])

randn 是 standard normal distribution, 和普通是 uniform distribution 的亂數無仝.



陣列个型(Shape)

Shape 就是伊的維度 (dimension) 和逐个維度个大細个表誌. 一維陣列, 有 10 个元素个型就是 (1, 10). 毋過, 佇二維陣列來講, (1, 10) 和 (10, 1) 个型是無仝个:


>>> arr = np.arange(0,10)                 # 是 array
>>> arr.shape
(10,)                                     # 第二个是空个
>>> arr.reshape(1,10)
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
>>> arr.reshape(10,1)                     # 第二个是 1
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5],
       [6],
       [7],
       [8],
       [9]])

咱會當看著: 若無經過 reshape(), 普通一維陣列是無第二的維度.  凡勢你會問: (10, ) 和 (10, 1)  毋是仝款? 無毋著, 毋過, Numpy 就按呢設計, 咱就愛知影伊的鋩角, 無你就會踢著鐵枋.



共濟維矩陣運算鋪平 (flatten)

咱嘛會使共陣列平,也就是共濟維陣列,成做一維陣列:

>>> A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9])
>>> A.flatten()
array([1, 2, 3, 4, 5, 6, 7, 8, 9])

共一維陣列成做濟維陣列 (reshape)

會使鋪平, 嘛會用共伊轉--轉來(tsuán--tǹg-lâi), 就是用 reshape() 這个方法.



>>> arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> arr.reshape(3,3)
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])



Numpy 的索引和揀選(Indexing and Selection)

Numpy 的陣列, 佮 List 仝款, 上基礎个方法是用 [] 來揀選伊的元素:

>>> arr = np.arange(0,11)
>>> arr[8]
8
>>> arr[1:5]
arrray([0, 1, 2, 3, 4]) 

List 的 Slice, 嘛會用之. 紲落來是和 List 無仝个所在


楦大(Broadcasting)

兩的陣列運算,有時無仝維度。這時,Numpy 會自動共少維度 ê 彼个陣列闊,予伊和較懸的維度 ê 陣列仝款,就會當做對應元素(element-wise)。舉例:


>>> arr * 3
array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27, 30])

是 [ 3., 6., 9.] * 3 --> [ 3., 6., 9.] * [ 3, 3, 3]。雖然 3 是純量(scalar),算是 0 維。毋閣已經人(hông)做一維陣列,就會當做 element-wise 計算


>>> arr[1:5]= 100
>>> arr
array([  0, 100, 100, 100, 100,   5,   6,   7,   8,   9,  10])

就算是 Slice, 也是會佮 100 楦大做 array 才一捆囥入去.

Khok-pì 抑是視角 (Copy or View)


這是 Numpy 陣列和 List 一个重要个無仝:
>>> arr = np.arange(0,11)
>>> a_slice = arr[0:4]
>>> a_slice[:] = 99
>>> arr
array([99, 99, 99, 99,  4,  5,  6,  7,  8,  9, 10])

咱明明是改 a_slice, 哪會改著 arr? 原來你鉸一塊 slice, 窮實是仝一个 Numpy 陣列个視角, 就親像用譀鏡來看物件, 干焦看著一部分.

欲按怎 Khok-pì 另一無仝个物件咧? Numpy 有準備一个 copy() 予你用:

>>> a_copy = arr.copy()

a_copy 就和 arr 無關係.

2017年9月2日 星期六

Python ê 基礎: 安裝 Anaconda ê Python

最近買一本冊想欲耍看mài 當 ê 深學(Deep Learning),伊建議人安裝 Anaconda 版本。我就佇網路頂仔查看安裝一咧,心得寫--落來:
Anaconda (台羅:e-na-khon-ta, 意思是大蛇) 是 kā 資料科學(data science) 需要的包袱仔(package,你講套件嘛會使)整理整理,收咧做一咧平台(platform)。免錢,開放原始碼,網路頂仔閣有不止仔濟人佇用,有人問佮討論。而且伊閣是平台: 也就是你寫好的物件,會當佇咧 Windows, Linux, 和 MacOS 來迒去,免閣做徙栽(Porting) ê 工課若是 Python 初初入門,會是袂䆀 ê 選擇

Linux/Ubuntu

就是去共包袱仔--轉來你的電腦:

https://www.anaconda.com/download/

因為我是 Ubuntu 17.04,就是徛鵝彼隻,有 Python 3.6 和 2.7 兩的版本,咱 Python 3.6个,--落來執行:
$ bash Anaconda3-4.4.0-Linux-x86_64.sh

基本上伊就會自動安裝。落尾手 ,伊會問你問題:

Do you wish the installer to prepend the Anaconda3 install location
to PATH in your /home/black/.bashrc ? [yes|no]
[no] >>> yes

若是原本無 python,抑是以 Ananconda ê python 做為你主要 ê python,就回答 yes。若是你想欲保留原本 ê Python,就是 no。
佇 Linux 頂仔本在就有 Python,我是較愛分予清楚,所以我揀 no。
其實,所有 anaconda ê 物件攏是佇你的 home 目錄下跤 ê anaconda3/,所以你落這咧命令 anaconda ê python:
$ ~/anaconda3/bin/python3
Python 3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:09:58) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

若是干焦 python3,伊會是:

$ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04) 
[GCC 6.3.0 20170118] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 


起頭 ê 版本資訊,就知影是佗一咧 Python 佇


Windows/Win10

去仝款 ê Download 頁,
這見是揀窗仔 Windows 來下載,落來了後,用滑鼠佇Anaconda3-4.4.0-Windows-x86_64.exe(抑是 32 bit 版本,看你的 OS 是 32/64bit) 點 ê,就出現這咧畫面:

--落來就 Next/Agree 一直--落去。
安裝結束了後,試開看--mài:uì 倒手爿下跤ê 開始/Start,  Anaconda Navigator,

拍會開,就是安裝成功阿:


佇 Linux 來看GPX 檔案

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