2018年12月11日 星期二

竹東圳 開發歷史與水圳介紹

竹東圳 五豐里山區 河面倒影

水圳,是農業時代的產物。農地對水需求殷切,離河遠或地勢較高取水困難的旱地,僅能種植經濟效益低的作物如甘藷、地瓜。若有水圳協助,就可將旱地轉為良田,不只產量增加,更能種植水稻等高價作物,對於糧食供給和農民收益都有莫大幫助,以嘉南大圳為例,水圳的興建過程雖然艱辛,但成效卓著,水圳修建前後,水田面積增加數十倍,稻貨量亦增加四倍,福國利民莫此為甚。所以水圳等水利建設,一直以來都是主政者念茲在茲要務。

清領時期的三大水圳,高雄曹公圳、台北瑠公圳、彰化八堡圳,以及日治時期規模宏大的桃園大圳、嘉南大圳,都是台灣農業發展上重要基礎建設。此類圳路共通特性是灌溉區域地勢平緩、面積廣大,河川能供給區域有限,必須以人工修築的水道的方式,從上游將河水導引至更大範圍,藉此擴大灌溉面積。區域內則有綿密的支線和分線,提升灌溉效率。

此外,若灌溉區是位在丘陵台地上,就需要採用其他策略,由更上游處就興築水道引水。沿路取等高線前行,遇山鑿洞,遇澗架橋。竹東圳即是此典型。

竹東圳,顧名思義是竹東境內圳路。此處有廣大耕地,但都分佈於竹東丘陵與頭前溪南岸間,地勢遠高於溪岸,取水困難。為確保此一地區廣大農地用水之便利,日治1924年殖民政府開始進行設計,經過四年的設計和興建,於1928年完工。圳路長度約21公里,受益面積達800公頃,為新竹開拓史上規模最大,灌溉面積最廣大的水利工程。

如此重要水利設施,對多數都市人來說,充其量也就是條不缺水的水溝罷了,更何況圳路隱蔽在山間,偶爾露頭,很難觀其全貌。我也是因為單車和慢跑,才陸續在竹東與寶山荒野間發現它的蹤跡,再佐以網路資料後才大致掌握它的地理關係。

為了方便說明,就由源頭起,依次介紹各區段吧。

1.攔水壩

水圳之位置,必須處於相當之高度,方可充分涵蓋全區灌溉之功能。竹東圳攔取頭前溪上游水源上坪溪,利用軟橋發電廠引用渠道作為導水路,由地下分流至軟橋取水口。攔水壩位在兩山夾持處,更向下游,上坪溪河面平緩展開,且員崠與竹東地勢更低不利取水。

竹東圳攔水壩

發電廠內有號稱台灣發電量最小的水力發電廠(0.22MW),無緣進入參觀,附上網路截圖。

軟橋發電廠(連結)

2.取水口

取水口與攔水壩相距不遠,汽機車可達,面積約一個籃球場範圍。滾滾河水在眼前奔流,伸手可及的距離感與上坪溪時遙不可及的印象大相違背。河水由此再區分成數個水道,包括主角竹東圳和寶二水庫兩分支。

竹東圳取水口

軟橋里為樸實的客家農莊,幾年前突然因為彩繪村小有名氣,彩繪的房舍從一戶擴展到村內各公共空間,只是繽紛的色彩與田景仍難掩蔽凋零廢墟與河岸砂石工廠,盤根錯節的歷史,都是難以解除的問題。

軟橋里

3.軟橋第一號隧道

一號隧道是竹東圳的代表地標。此照片攝於西元1928年,應是圳路完工時所拍攝,也是圳路催生者林春秀家族合影。

網路連結

林春秀是竹東圳重要催生者,1924年,大正十三年,新竹州知事和竹東郡守首先規劃圳路,資料顯示總工程經費約40萬元,當時一個南投竹山的警察的月俸為十八圓,簡單換算,圳路經費約十幾億台幣。工程經費龐大,不足額部分就由受益農田的地主分擔。當時二重埔最大地主就是林春秀,既然是是最大受益者,遂努力籌資挹注大半工程費用。通水後,大批荒地變為良田,林春秀自然也成為當地重量級人士。

4.連綿隧道

從一號隧道後,水圳幾乎都在山嶺中穿行,沿途遇山開隧道,遇溝則架橋,有些谷地更有虹吸工程,累計共有13座隧道、6座水路橋、3座虹吸式工法及明暗渠等不同結構物。唯一探訪機會是,每年冬天都會停水進行歲修,如連結

具體順序,可分為軟橋第一號隧道至台三線前段,以及台三線至第十三號隧道後段。前段穿越山頭,繞經員崠國中後方,進入員崠淨水廠,穿行竹東丘陵之東北山麓間,之後再經由資源莊附近,再由南清公路下方穿越到省立竹東醫院後山山腰,繼續前行穿入隧道。

後段由台三線開始,水圳採地下方式穿越台三線,經過上公館、竹東圖書館附近轉入山區。

5.虹吸工程

原水圳在五豐里繞巡一處小山坳,這裡因為遠離人煙,山頭遍布垃圾,不遠處更有大型養雞場,整體環境不適合水圳,還好水圳都已加蓋,影響不大。

根據資料,此山坳除原本水路,開口兩側另架設虹吸工程,以連通管的原理,利用兩端水位高度差造成的壓力,由底部將水由高處送至低點。因為全在地底難以觀察此現象,但在出水處的確可以目視水源湧出,且附近農人透露這水下涵洞內,尚有不少大型鯉魚。

虹吸入水口 連結

繞出山坳後,水路沿著山坡,環境清幽,不多久又進入一水泥隧道。

虹吸工程後約五百公尺隧道

6.沙坑仔第十二、十三號隧道

此兩隧道隱密在慢跑路線邊緣,若不注意很容易忽略。由中興路向上到達沙坑仔伯公廟,再向上一百公尺,注意左側斜坡,有片雜林,向下就可見第十三號隧道。外觀與老照片紅磚結構不同,全以水泥包覆,應是近幾年重新整治結果。

第十三號隧道,兩側還有逃生梯


水圳前方三十公尺處就是第十二號隧道,兩者間渠道區分為兩路,推測是期望透過分流減少水流沖刷力道,保護後方隧道。

左右兩條分支,前方是第十二號隧道

7.平緩山坡明渠

離開山區後,水圳即沿丘陵等高線緩緩前行,除了少數路段有鋪面,大多都是明渠。水路在山谷中蜿蜒流動,從高空看,應像連綿弓字前後接續,依山向前。


圳體由方整的水泥構成,溝寬約二公尺,深約一公尺,靠山側為雜林或竹林,另一側必有一到兩公尺寬維護道路,沿線必有菜園,種植各式青菜,每次都希望能向農民購買這些可口青菜但都不見人影。

此路段長約五公里,倚山而築的水圳,因為地勢高,視野極佳陪伴我度過許多慢跑的好時光,也適合闔家來此單車小旅行。另外,新竹荒野保護協會有些生態資料可參考(連結)。

部分路段為防止落葉等原因,水圳有加蓋

水圳清澈、偶爾有美麗水草附生

8.水門

圳路邊偶爾會有放水閘門控制放流至沿途區域,天藍色的閘門搭配鮮黃色轉輪,在綠色大地中顯得十分吸睛。以往水門由人力轉動,今年政府撥大筆經費,預計將全線水門改為遠端遙控控制,也因此圳路邊拉了不少電桿和無線通訊設備。

建設水圳容易,維護管理更難。如何有效的利用有限的水資源以提供各地用水為一重大之課題。豐水期可實施超量灌溉或正常灌溉;於枯水期就麻煩了,早期放水時,為防止其他灌區偷水,還要成立巡水隊,花費大量時間沿水路來回巡視,之後有水閘門,改為守水閘門,但每遇旱季村民甚至為爭奪水權大打出手。

早期之灌溉配水作業中,對於灌溉用水量無精確之計算方式,然為便利水利會之灌溉管理與營運,就依工作人員與農民之多年工作經驗,作為灌溉之依據,容易衍生不公平的爭端。科技時代,工具和演算法都大幅進步,灌溉用水量之訂定應該更準確且合理,更能更符合田間之實際狀況才是,或許就可以應用上述遠端監控系統資訊。

9.通往寶山水庫

水圳建於1928年,持續四十多年農用後,1976年有了重大變化。原本農業灌溉外,因為鄰近寶山水庫,還得擔負每日供水量約6至7萬噸任務。

水圳在此分流至寶山水庫

水圳在個山坳處分流,由一新開挖隧道導入寶山水庫。入水口在水庫東北方,水道上增加許多擋水階梯可減少土壤沖刷力道,稱為跌水工。

跌水工

10.大型水圳橋

綿長的圳路在雲南路附近抵達這個山頭邊界,與對面科湖路山丘,隔百公尺山谷遙遙相望,前人在此興建了水圳專用橋樑以克服地形起伏所造成的阻礙。(參考瑞芳古蹟連結)

遠眺水圳橋

接近橋梁,可明顯看到下方高速公路,以及橋內結構

11.竹東南圳

水圳過橋後就進入柯湖丘陵台地,此處遍佈濃密的相思林、竹林和芒草。河水吸引了白鷺鷥,更有水蛇蹤跡。水圳在此分流為南、北路,南路沿著柯湖路201巷在台地上蔓延,附近有大片竹林、果園、稻作,還有些養鴨人家和廢棄軍營遺跡。

12.竹東北圳

北路位在二重埔和三重埔台地上方,由此眺望下方綿延數百公頃農田,及至遠方蜿蜒之頭前溪,其間落差甚大,想像當時曾是一片苦於無水灌溉的荒埔,如今卻是稻浪翻飛,一片欣欣向榮景象。遙想當年林春秀以個人之力,促成此巨大轉變,對其見識與魄力,投以莫名崇敬之意。

水圳通水後,林春秀的農田水利灌溉收穫日豐,當時他的農地已經累積為四百餘甲,林家成為竹東鉅富,並在二重埔蓋了一座一堂八橫「九牧第」。當年住在九牧第的家庭,最多曾有四十多戶人家,家家戶戶幾乎都是務農,靠這片田野為生。

九牧第現況

好景不常,台灣光復之後,國民政府實施「耕者有其田」政策,林春秀辛苦開墾的萬傾良田,霎時間全轉分至當時佃農,自己也不再是新政府眼中紅人,落寞心情可想而知,不多久含恨而終。悼祭的輓聯寫著:「萬頃良田經易主,千年基業轉手空。」真是道盡了他一生無奈的際遇。九牧第也成為歷史長河中一片微風吹過的漣漪。

年底水圳停水,歲修


2018年11月17日 星期六

散文集:被討厭的勇氣


延續上一本"新"佛洛伊德學派文集後,接著看『被討厭的勇氣』。作者古賀史健和岸見一郎,內容則是將阿德勒心理學重新包裝成現代人更易瞭解和接受的對談型式,介紹勇氣、自由和自卑感與各人的關聯。

佛洛伊德是眾所周知的大師,他的心裡創傷的論述非常吸引人,對自我認同低落的人來說,所有成因都可以直接歸因於成長時期,心理背負的傷痛才造成現在不幸的遭遇,這種因果定律相當簡單易懂,戲劇性的展開更讓人揪心,有難以放手的魅力。

對此,阿德勒則持完全不同見解,他認為不要由經驗來決定自我,而是由我們賦予經驗的意義來決定自己的一生,人生不是別人給的,是我們自己選擇的。決定要怎麼生活的,是我們自己。

阿德勒相信:人能夠主宰自己的命運,不必受命運支配。其充滿人本主義信念的理論,被人稱為個體心理學,廣泛應用於輔導和教育等社會、文學領域。學說內容可摘要成幾個部份。

一、人性的基本動力。自卑感

阿德勒認為人類的行為都是出於自卑感及對自卑感的克服與超越,「自卑感」是所有人都具備的一種正常感覺,自卑感激起個體產生追求補償力量,這種力量便成為個體追求優越的基本動力。一個健康、正常的人,當他的努力在某方面受到阻撓時,他就能在另一方面找到新門路,爭取優越感。

二、健全的人格,與社會興趣

人類在幼兒時期,就漸漸形成一種生活模式,根據此生活模式而形成生活的主觀目標,但每個人的生活模式不同,因此每一個人的主觀目標不完全相同。當父母不是過份溺愛也非缺少關懷,孩子容易沿著直線努力去了解他的目標,並發展進取、勇敢的性格,性格發展的開端通常都有積極、前衝的特點。這類型的人生目標是奉獻、與人互助合作,安身立命。達到此情境,也就是所謂的『善』。

三、錯誤目標

若是父母過分寵愛或忽視兒童需要,就容易產生下面兩種現象。產生嚴重自卑情結。

被驕縱的兒童:由於溺愛使他相信自己每次需要都可以得到滿足,他們多會期待別人把他的願望當法律,他不必努力就會成為天之驕子,所以當他進入一個眾人不是以他為中心的情境,且別人也不是以體貼他的感覺為目的時,他就會覺得世界虧待了他;當他們長大後,如果別人不再對他們諂媚或順服,他們往往覺得社會對他們充滿敵意,而想要施與報復,此時如果施與處罰,只會更加強他們別人都反對我的信念。成為自私自利缺乏社會興趣。

被忽視的兒童:兒童感到自己毫無價值,引起他們憤怒並使他們用懷疑的眼光看待每一個人,他們從不知愛與信任感為何物,不但懷疑別人,也不能信任自己,當他面臨生活問題時,他總會高估其中的困難,而低估自己應付困難的能力及旁人的善意與幫助,他們多數會成為失敗者,

這兩類個性,因為總是覺得身邊有反對者存在,所以總會嘗試改道,不直接接近自己的需求,而是利用機巧,以達到被認同及獲得一時權力的目標。訂了錯誤的目標,使用錯誤的方法來追求優越感,將他們的努力轉向生活中無用的一面,真正的問題卻被遮掩起來或摒除不談。

四、輔導方式

阿德勒認為大多數不適應的原因都是社會興趣不足,還有不想在人際關係中受傷,不想被批判。我們要做的是改變他的目標,培養社會興趣。讓當事人發現問題在於他的私人邏輯跟社會要求不相吻合(錯誤知覺),協助當事人感受自己與別人是平等的並鼓勵人體察其優點和內在資源,接受不完美的自己,然後追求向上提升,成為對社會有貢獻的人。

個體心理學的精神不是治療而是協助患者成長模式,因為不是生物決定論,認為只要患者有信心,身邊也有支持,就能遠題恐懼,脫離焦慮的泥沼。

----

兩位作者試圖將心理學理論,套入常人生活中,雖然有趣,但心理學與勵志小品終究不同,說服力不夠。另外,作者花了許多篇幅介紹社會興趣更讓我汗顏,自己時間多半都投注在運動休閒、散文小說及工作,並沒有很融入社會,更遑論造福社會。自己離阿德勒所謂自由的人,似乎還有一段不短的距離啊。

2018年11月13日 星期二

散文集:焦慮的現代人



焦慮的現代人(the neurotic personality of our time),作者Karen Horney,英文初版為1937年。中文版由新潮文庫在1975年初版,譯者為業內權威葉頌壽醫師,內容豐富、譯文流暢,是信達雅兼具的好書。

作者卡倫·荷妮是新佛洛伊德學派研究者,該學派依然保持本我(id)、自我(ego)、超我(super-ego)和潛意識及夢的概念,但不強調性與攻擊衝動,而重視社會文化經驗對人格的影響。

荷妮認為每一文化的生活情境都會產生一些恐懼不安。它們也許是外在危險(如大自然、敵人)所引起,由社會關係之形式(由於壓制、不公平、強迫的依賴、挫折所產生的憤怒敵視)所引起,由文化傳統(傳統上對鬼魂,對禁制之破壞)所產生,不論它們的來源如何。我們個人或多或少都會具有這種恐懼不安之情,但是一般而言,每一個個人都會受到影響,沒有人能避免它們。這些不安一般皆會受到某些保護性的措施(如禁忌、儀式、風俗等)所消除。通常言之,這些防衛乃是代表應付恐懼的更經濟的方法。

正常的人,雖然也會受到它自身文化之影響而有恐懼之心及防衛心理,一般來說,卻能發揮自己的潛能,享受生活所給予他的一切,並利用文化所潛藏給予的可能性使自己獲益。也就是說他除了那些不可避免的痛苦外,大多數時間他並不會感到痛苦。

不過,到了現代,經濟上強調個人競爭原則。孤立的個人必須與同一群體內的個體互相競爭且凌駕於它們之上。這種情境的心理結果造就了個人之間的敵對怨恨態度。這種介於個人之間的潛在敵對緊張態度,結果會經常得引起恐懼,對心中有潛在怨恨別人的恐懼,而它又會對因自己的敵對怨恨,而招致報復的恐懼之心所加強。

在此壓力下,甚至最正常的人也不免要感到,如果他處事成功,就獲益良多,如果失敗了,就一文不值。不必說,這陳示了自我尊重的不穩固基礎。結果促使個人在心裡感受上,認為自己孤立無依,若再與焦慮不安及對自己徬徨無定,不知所從的心理相伴,更是可怕。

上述情境迫使人們產生對親情關懷的極端強烈需求,擁有關懷的人,較不會感到孤立隔絕,也不會受怨恨敵意所威脅,並且對自己較不會感到徬徨不定。由於它是人生的最重要需求,因此愛在我們的文化中,就被過分強調了。它變成一種幻覺,正如成功一樣,以為它是解決一切問題的方法。這也就是本書探討的兩大主題,對權力的追求 striving for power 對關懷的追求 striving for affection。

而權力和關懷的本質都有虛幻性質,再加上對權力的競爭與傳統以來標榜的博愛及謙虛就有著巨大的反差,都讓人內心充滿了許多矛盾的感覺。

----

精神病人或心理上有困擾的人,除了上述的恐懼外,由於個人生命中的情境(大多時候是兒童與父母的交互作用中產生基本焦慮),比起一般人來要更易受到痛苦,行為上,他的過份需求,與對一無所獲的恐懼,他對自我榮耀、聲望地位的追求,與深感個人無依無助的感覺。他們與正常人的分別,只是程度上的。

正常人能夠面對這些困擾並有所反應,而不會損害到自己的人格,在精神病人身上,所有的衝突都十分強烈,任何令人滿意的解決都已是不可能。他們通常由於早年孩童經驗的影響,因而無法解決它們,即使努力掙扎仍然無法調和類似衝突,朝向侵略攻擊的傾向,與順從屈服的傾向,甚至要付出人格損害的代價,才得以解決。

----

類似以社會文化角度切入心理學領域,除荷妮外,還有阿德勒Alfred Adler、弗洛姆Erich Fromm、容格Carl G. Jung。他們的論點或許不夠科學,但對我等心理學門外漢來說,反而能吸引目光,本書已是八十年前的論點,現在讀來,文中所描述的心理現象,仍然是我們所關心的議題。

尤其有了些年紀,更能體會,人生當然有許多不可能徹底解決生存焦慮問題,唯有透過對現在的了解,未來的希望,才有可能獲得對自己、對群體的洞見,才有可能在分裂,充滿焦慮的情景中,建立完整的自我。

2018年11月7日 星期三

散文集:音樂使人自由


坂本龍一最為人所知作品是Merry Christmas, Mr. Lawrence,樂風空靈飄逸又帶著哀愁,很合現代人脾胃,各版本中,尤其喜愛吉他版宇多田光版,也推薦單曲Solitude。此外他也創作許多膾炙人口的電子音樂和電影配樂。為日本近代音樂界代表人物。

音樂創作外,他還跨界入流行音樂,從最初28歲時與細野晴臣、高橋幸宏組建的合成器搖滾樂隊Yellow Magic Orchestra(YMO)紅遍日本,之後在電影,『俘虜』、『末代皇帝』都有演出,甚至擔任過品牌代言人。近幾年則是積極投入環保、和平運動。

很難想像,如此活躍於文化音樂界,擁有品牌知名度,更有時代意識的音樂家,從小是受古典音樂和傳統日本社會薰陶成長,印象中,古典音樂講求格律嚴謹且日本社會強調內省,很難培養出跨界大師,偶然的機會翻閱,『音樂使人自由』,由坂本龍一口述成長和思想變遷,對上述問題,有了完整的回應。

坂本龍一家學淵源,父親是日本著名的文化人,編輯過三島由紀夫成名作『假面的告白』,母親同樣亦是出身名門世家。坂本自小就接受悉心教育,即使在戰後艱困時期就進幼稚園學習,且是強調啟發思考的學校,暑假作業是養兔子並且將心情編成曲。在小學四年級就和母親聽現代音樂演奏,這些應該都對他思想很有啟發。

個人資質方面,學生時代的坂本就顯露其天資與專注力,也就是我們口中的學霸。初中時就能掌握巴哈、貝多芬、德布西等西洋音樂源流的作曲理念,高中時期更大量接觸爵士和新音樂如John Cage、Claude Debussy。高中畢業後輕鬆考入東京藝大研讀作曲與民俗音樂。另外,除了天資優異,他更不時提及熱愛工作的態度,自述到發現罹癌前,日日夜夜都心繫工作,並且不以為忤。

除了家世好、個人條件佳,更重要是他成長時的政治及音樂環境。二戰後,人類社會進入重建的時代,時代劇烈變動影響下,全球包括日本,都進入解構和重建過程。

政治上,在他高中時期,發生日本近代重要事件,安保運動,當時大學生為了抗議政府錯誤的協防政策,以佔領校園、串連舉辦示威遊行活動,在青年學子間掀起一股風潮。坂本雖非主要份子,因為廣泛接觸左派思潮,受到許多啟發,大學過後更持續關注社會發展。

音樂上,戰後現代音樂蓬勃發展,運用極端的形式,打破舊有音樂制度與結構。作曲家不再蕭規曹隨,希望從傳統音樂的束縛中,讓聽覺獲得解放。音樂也不再是高高在上,而是貼近生活。這狂潮不只限於音樂本身, 而是社會整體的一股趨勢,社會上各種實驗性機會出現,彼此激盪出各種火花。

政治與音樂上的刺激,讓他總是思考如何做出能代表時代的聲音,坂本龍一終其一生不做長期預劃,不為自己定位,總是把握每個當下,見招拆招。或許就是延續現代音樂中非具象、流動性高的風格。之後從事電子音樂和電影配樂再再證實他的真知灼見。

如今,這位曾創造出Mr. Lawrence如此撫慰人心彷彿夢境作品,積極參與環保議題,帶領人們走出殘破環境與受傷心靈的大師,又有什麼想法呢?CODA電影中,他說,想創造出「一百年後,人們還會聽的音樂,就是我想做的音樂。」,或許,這也是音樂的某種本質吧。

電影贈送海報


2018年11月5日 星期一

神的孩子都在跑步,2018合歡山馬拉松


想要像飛鳥一樣地活著,朝向嶄新的希望場所乘風而去 攝於鳶峰

個人第四場全馬,為難度非常高的合歡山馬拉松。為什麼是合歡山呢?單純就是愛這裡,愛小溪營地、合歡北峰,也愛單車西進武嶺,愛屋及烏,覺得若能跑在合歡山上,一定是件很舒服的事情。

大叔跑齡2年半,參加過三次全程馬拉松。對中年"胖"宅工程師來說,既無天生神力,也不追求(求不到)運動員體格和科學性訓練方式。愛跑的唯一原因,只是沉迷於長距離跑步時腦內猛烈分泌多巴胺帶來的飄飄欲仙感,所以平時多半也只是靠著一股氣勢,呆呆笨笨的以跑量為標準而跑著。

類似的歡樂跑心態,應付平路馬拉松還行,想上合歡山就明顯不足,最明顯的是高度,海拔3250公尺可不是開玩笑的,高山上氧氣少,溫度低,站著不動都會喘,何況還要跑起來?其次是坡度大,從清境到武嶺到松雪樓來回高度可能有一千五百公尺吧,有多高呢?可以想像搭乘電梯上下台北101大樓,嗯,而且還是三次歐。最後是跑距,高和陡之外,距離更達44.5公里。

難歸難,還好網路已有不少教戰守策,只要跟著他們指示,將月跑量拉到150至200公里,間或搭配幾次清泉到觀霧的練習,再加上十月中一次合歡山模擬預演,就可以上場參賽啦。

睡車上 畜牧中心看能高日出

---自主訓練---

朋友聽到,我要為合歡山馬拉松安排一次自主訓練,都紛紛露出不可置信的表情,起初我也很猶豫,事後檢討對初跑者來說,這是最正確的決定。尤其是第十公里的震撼教育,對正式活動有很大的幫助。

週間早上的台14甲線,幾乎可以用杳無人煙形容,帶著簡易補給和手機從青青草原附近出發,起初以認真且緩慢的速度跑著,陸續經過武界、梅峰、翠峰,甚至有能直奔上山的錯覺。起跑十公里後發現事與願違,隱約覺得身體仍能提供動力,但就是禁不住得停下喘氣。以往平路跑時,文青的認為,每一次呼吸的跳動,是驗證我還活著的證據,也是觀照並反省自己再前進的機會。觀霧練跑時也能二十多公里山路不休息,但在海拔2500公尺,強烈的心跳讓我驚訝,人的身體居然能喘到這種境地。稀薄的空氣,無奈的心情,唯一能做的事情就是放慢腳步,以緩走休息一陣後再跑的策略,撐完剩餘的十公里。

終於在三小時五十分後到武嶺,說真的,累到連難過的心情都沒有。想想已經如此盡力練習還這種成績,這馬拉松不來也罷。轉念又想,幸好有這次練習,才能顯露出平常看不見的問題,也因為熟悉身體極限,活動當天才不會過度強求自己。

武嶺後陡下合歡山莊,簡單四望拍照後就"走"回原地,累積時間四小時三十分。依此數據推測,活動當天扣除補給以及參加比賽腎上腺素影響,應該能在七個小時完賽。距離大會關門時間還有半小時餘裕,可以安心了。

合歡東峰

---11/3---

有了自主練習的經驗,活動當天所有流程就像是重複撥放預錄影片,藍天白雲山景依舊,每個角落都有強烈的既視感,不同處就是多了數千名跑者,以及我身上的號碼布。

6:30在台14甲11公里娜嚕灣門口起跑(1968M),限時7.5小時。出發五公里後,就有人停下腳步,心想,不能被影響啊,加速通過這區域,直到十公里附近,果然撞上身體極限,只能比照上次經驗,開始走跑策略。

放眼四望身邊人也都開始走跑。一群人浩浩蕩蕩,在台14甲上像殭屍部隊般,垂頭沮喪地前進,雖然心有不甘,先前的自我訓練在此時適時發揮效用,有句名言:If you want to run, run a mile. If you want to experience a different life, run a marathon. 馬拉松和人生相似,既然遇到無法突破的高牆,只能減少自責的心,安心的走著。

慢慢走

鶼鰈情深

抵達鳶峰(2730M)後,坡度較緩才能鼓起氣力間歇性的跑起來。接近昆陽(3100M)前又開始恐怖的陡坡持續到武嶺(3275M)。抵達武嶺時間約三小時十分,比先前自我訓練快四十分鐘,繼續跑下合歡山松雪樓(3158M)後折返"走"回武嶺就是二十公里的連續下坡。

跑下坡時,一掃先前上坡時的哀怨,將保留的體力一股腦爆發出來,雖然都維持五分速卻沒有痛苦感覺,反而很嗨。最後以五小時五十多分抵達終點藝家原民宿,是全部參賽者的"前"百分之十七歐(胖大叔自豪中)。

武嶺

---進步---

從成績看來,二年來四次全馬,排名從首次的百分之五十,進步到三十五,再到目前十七,的確是持續進步中。完全印證慢跑是只有累積,沒有奇蹟的活動。也能體會許多看似輕鬆的跑者,其實是付出很大的心力練習。

不過對隨興亂跑的中年胖大叔來說,成績進步不該高興,反而是太勉強身體的警訊。每個跑者追求的目的不同,但不可否認,馬拉松的本質是一種競技比賽,他的長度對一般人來說,不是健康的活動,真要跑愉快,半馬就可以。以我來說,正確的態度應先以減重為目標,並加入科學的訓練方式,而非在背道而馳的方向上埋頭苦幹,這樣只是加速衝向錯誤的終點而不自知。

---初心,神的孩子---

跑在朗朗晴空下,對天地的壯闊和人的渺小自然會有更深刻的領悟,我由"爬"合歡山開始,經歷""的過程,進階到今日的"跑",方式不同景色也迴異,卻都能交織出豐富且美好的回憶。人生短暫,倏忽即逝,能留下記憶者幾希。感謝主辦單位盡心盡力的籌備,更謝謝所有身邊的跑者,我們都像是高山上神的孩子,如此的勇敢且無懼。

神的孩子都在跑步

2018年10月28日 星期日

筆記:RNN及眾多應用





Recurrent Neural Networks 循環神經網路,在時間上傳遞的神經網絡,它的深度是時間的長度,也就是加入記憶的因素。RNN特別適用於處理聲音、時間序列或自然語言等序列資料。RNN與DNN的區別在於有一個反饋循環,將第n-1步的輸出反饋給NN,對第n步的輸出產生影響,之後的每一步也都以此類推。

RNN和DNN都能通過對讀取的數據建模來記住有關於現實世界的某些信息。但這兩種網絡的記憶模式完全不同。在定型之後,DNN會生成已學習數據的靜態模型,然後這個模型就可以接受新的樣例,進行準確的分類或聚類。相比之下,RNN則會生成動態模型,亦即會隨時間推移而變化的模型,這種變化可以讓模型依據輸入樣例的上下文來進行準確的分類。更精確的說法是,循環模型包含了決定同個序列中的前一次分類結果的隱藏狀態。在之後的每一步中,這一隱藏狀態會與新一步的輸入數據相加,生成一個新的隱藏狀態,再得出一個新的分類結果。每個隱藏狀態都會被循環利用,生成經過調整的後續隱藏狀態。

真的很抽象,就用個JAVA範例來說明。

RNN具有預測能力。它們可以隨著時間推移動態地把握數據結構,可以用於預測一個數據序列中的下一個元素。這樣的元素有可能是一個單詞中接下來的字母,或者一句話中接下來的單詞(自然語言生成);也可以是傳感器、經濟統計表格、股票價格動態等數據中的下一個數字。

大多數入門範例是MNIST,雖然圖像看似不是序列數據,但它們也可以被解讀為序列,然後輸入循環網絡中。MNIST也可以用基本RNN來處理,如test17.py,參考說明

其他範例
Google的塗鴉專案
音樂範例這裡。使用一般RNN技巧,但多了MIDI界面,就變得有趣。
Music-Generation-master
python main.py -d EDEN-midi
generate generated    output.mp3

LSTM RNN


RNN在處理長期依賴時(就是時間序列比較遠時)會遇到很大困難,因為計算距離較遠的節點之間的關聯會涉及矩陣多次相乘,這會帶來梯度消失或是梯度膨脹(大多是消失)的問題,解決的辦法就是使用Gated RNN,透過權重係數,允許RNN累積遠距離節點間的長期關係,而且在不同時刻改變這個係數,並且允許網路網際當前已經累積的信息。

LSTM結構如下,透過三個threshold,使得自循環的權重是變化的,這樣一來,在模型參數固定的狀態下,不同時刻的積分尺度可以動態改變,避免梯度消失或膨脹的問題。


每個LSTM的計算公式如圖,Ft遺忘threshold,It表示輸入threshold, ̃Ct表示前一時刻cell狀態,Ct表示cell狀態(loop循環),Ot表示輸出threshold,Ht表示當前單元的輸出,Ht-1表示前一時刻單元的輸出。

有些記憶會是最近形成的,而另一些則可能是在形成後經過許多個時間步才需要使用。能夠將時間間隔較遠的記憶與輸入有效聯繫起來的循環網絡稱作長短期記憶(LSTM)網絡。主要作法是不同的短期記憶應當在不同的時候調出,以便為當前的輸入指定正確的意義。


不過,實在還是不懂為什麼能夠記憶長期資料。


大多數RNN的應用都發現LSTM較RNN為佳。以RNN的MNIST正確率95%,改為LSTM(cell改成lstm),程式test15.py,正確率近百分之百。

其他範例test16.py,它讓nn自動追上一個sin的圖形,從範例中可以發現它越來越靠近。


另外的應用如,文字自動生成,先下載這個能處理中文版本的範例,它可運作,也會是後續更多應用的基礎。
Char-RNN-TensorFlow-master
訓練指令
python train.py \
  --use_embedding \
  --input_file data/poetry.txt \
  --name poetry \
  --learning_rate 0.005 \
  --num_steps 26 \
  --num_seqs 32 \
  --max_steps 10000
測試指令(必須把code中ipython拿掉)
python sample.py \
  --use_embedding \
  --converter_path model/poetry/converter.pkl \
  --checkpoint_path model/poetry/ \
  --max_length 300
自動接續故事專業版sequence2sequence介紹

筆記:ubuntu環境下開發工具安裝及使用

基本操作指令
  1. Alt + F2  輸入 gnome-terminal可開出terminal
  2. github
  3. unzip
  4. 輸入法:system settings  然後 Language Support  然後 install 缺少的package  然後登出再登入 ConfigureFcitx 選 + 選新酷音 關閉後會看到
  5. 繪圖軟體:KolourPaint
  6. 文字編輯器:notepadqq存檔的時候,記得設定語系,不然python會錯誤
  7. 文字編輯器:VIM sudo apt-get install vim  a : append  esc 跳回上層  VIM使用

GCC
  1. gcc -v是5.4.0太高,tensorflow build版本 用4.8 參考資料
  2. 決定全部降為4.8,參考文件 這裡
  3. sudo apt-get install gcc-4.8
  4. sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
  5. sudo update-alternatives --config gcc
  6. gcc -version   就是4.8.5
  7. 如果執行gcc-5 -v 就會看到原本
  8. 如果要全部變回來 sudo update-alternatives --remove gcc /usr/bin/gcc-4.8

循環登入問題
  1. 若不小心刪除或更新顯示卡的driver,就會造成螢幕解析度超大,GUI界面登入後不斷跳出要求重新登入的問題。例如安裝gnome-editor時居然也會出問題。
  2. 開機後,持續壓著shift按鈕,就會進入grub
  3. 選擇advance 繼續選擇 recovery mode (目前是 lunux 4.15.0-36-generic)  繼續選擇 root
  4. mount -o remount,rw /   參考說明
  5. mount --all
  6. sudo apt-get remove --purge nvidia-*
  7. reboot
  8. 進入系統後再重新安裝
  9. 不過,沒有用,下次的安裝還是會造成nvidia套件的問題,所以重灌了三次,唉
  10. 另外,軟體 text-editor 千萬不要裝,裝了似乎就會引起循環登入問題

File System Mount
  1. fisk -l 檢視目前硬碟狀況,條列每一個接上的硬碟
  2. 目前/dev/nvme0n1 是SSD 又分成三個 Linux(最大), Extended, Linux swap
  3. 目前/dev/sda 是傳統硬碟
  4. 目前/dev/sdb 是USB碟
  5. 目前/dev/sdb1,2,3,4 不知道是什麼
  6. ls /dev/[sh]d*   例如現在的/dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb  用不到
  7. df -h 顯示出目前硬碟的掛載狀態
  8. fdisk -l /dev/sda 可以確定是傳統硬碟
  9. fdisk /dev/sda
  10. p: 列出目前全部的partition
  11. d: 刪除某個partition
  12. n: 新增分割區,輸入 n 按 Enter。
  13. 選擇要建立 extended 還是 primary partition,因為我的硬碟全部只要一個分割區,所以我選 primary,輸入 p 按 Enter。
  14. 選擇 Partition number,primary 分割區最多可以有四個,隨便選都可以,不過建議選 1,免得以後看起來很奇怪,輸入 1 按 Enter。
  15. 輸入開始的 cylinder,用預設值就可以了,直接按 Enter。
  16. 輸入結束的 cylinder,若是要用最大的容量,就直接按 Enter,若是要指定分割區的大小,就用 +size{K,M,G} 的形式指定,例如指定為 100G 的大小就輸入 +100G 再按 Enter。
  17. 最後將分割表寫入硬碟,輸入 w 再按 Enter。
  18. 若是要離開 fdisk 就輸入 q 按 Enter 就可以了。
  19. format : mkfs -t ext4 /dev/sda1
  20. more /etc/fstab 硬碟的 UUID 就像是它的身分證字號,每一顆硬碟都可不同的 UUID,使用 UUID 來指定磁碟就不會因為安裝的順序不同而產生變化,這樣做的好處是若是當磁碟常常要拔來拔去時,系統管理者不用再去更改 fstab 的設定,系統會自動尋找對應的 UUID 來掛載。
  21. sudo blkid 可以看到每個硬碟的UUID,利用這個資料,更新 /etc/fstab
  22. 更新 /etc/fstab 依樣畫葫蘆,新增加一行 UUID=ac001b70-682c-454d-8b96-dca2fb5da992 /data2          ext4    defaults        0 1
  23. 重新開機 mount /data2 可是最後發現 根本不需要這麼麻煩 系統似乎會自動抓取

定時備份
  1. 實在無法解決nvidia的衝突問題,決定安裝timeshift連結,定時備份可以回朔
  2. 系統 軟體和更新 關閉全部的通知機制 參考
  3. 最近一次是因為pip -force 會自動刪除掉許多模組,導致下次無法順利開機,解決方式是,用ubuntu安裝USB,設定為開機磁區,進入後,起動內建的GNOME UBUNTU,然後
    apt-add-repository -y ppa:teejee2008/ppa
    apt-get update
    apt-get install timeshift
    然後起動timeshift,找到1T那個槽,選擇最新的檔案,選第一個,然後繼續就會出現一堆add delete update的表,反正不能改,就繼續進行,然後重開機就完成

JAVA
  1. sudo add-apt-repository ppa:webupd8team/java
  2. sudo apt-get update
  3. sudo apt-get install oracle-java8-installer
  4. sudo apt-get install oracle-java8-set-default
  5. java -version

Android studio安裝
  1. Eclipse用了好多年,配合安裝Ubuntu,拾起Studio。參考資料
  2. download 約1G,已經放在1T硬碟
  3. unzip,執行bin裡面的studio.sh,這邊需要透過terminal來安裝。cd android-studio/bin/./ studio.sh
  4. install some files ( UI automatically )
  5. UI launcher open Android Studio,click on Tools menu / Create Desktop Entry. / This should create an entry on the dash.
  6. try to build it. Studio automatically download the file in background ( SDK ... once )
  7. 過程中原本是要放在/usr/local,不過出了很多問題,乾脆就留在目前usr目錄
  8. build還是有問題,發現是sdk沒有經過同意 如下 ~/Android/Sdk/tools/bin$ ./sdkmanager --licenses都選擇同意
  9. 編譯成功,無法放在simulator上執行,重新開啟一個專案執行run,會出現需要simulator,選擇一個後,花很長時間下載,仍不成功
  10.  調整bios 將cpu設定成可以允許vt,模擬器顯示成功
  11. adb 位置在 /home/kayjean/Android/Sdk/platform-tools
  12. 自己的N8手機,開啟攝定,版本部分按很多下後,就會進入開發者模式,再進入開發者模式,允許USB偵錯。接上ubuntu,使用adb devies成功
  13. 實際安裝進手機時,似乎版本不合,取得新版本後成功
  14. 最基本的範例是my application2

Android studio使用
  1. gradle架構,最大的範圍是project,裡面包含許多小的module,各個小的module(可能是app也可能是lib)都會有自己的build.gradle,參考資料
  2. 一個project要把各個module包含起來,就要使用file的project structure
  3. 沒有DDMS了,位置在SDK/tools/monitor 代替

Android studio NDK
  1. 目前系統安裝v18,如果從中文頁面進入是16b,16b可順利編譯但每次啟動android studio會跳出更新訊息。
  2. 遇到No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android錯誤訊息,就參考,到這裡,下載不同版本
  3. NDK安裝方式
  4. 總之,以上的方式都太過複雜,真正嘗試後,還是有問題。最簡單方式是程式啟動時,依照wizard指示,選擇有c++ support的選項,就可完成(雖然沒有.h檔案)。例如my application3

 

WebCam

  1. 以程式控制webcam,最基本為v4l2,基本範圍為C
  2. 進階為OpenCV,又可以區分成基本的C語言
  3. OpenCV - Python
  4. OpenCV - Python Thread版本


Ubuntu上使用Github

  1. 為了能夠多地點儲存以及rollback開始使用github
  2. sudo apt-get install git
  3. git config --global user.name "kayjean"
    git config --global user.email "kayjean@gmail.com"
  4. mkdir github    cd github/
  5. git init Mytest  (會新增實體目錄Mytest)
  6. cd Mytest 接下來在這個目錄中操作
  7. gedit README type some messages
  8. gedit sample.c type some messages
  9. git add README
  10. git add sample.c
  11. git status 可以看到目前還有哪些沒有被commit
  12. git commit -m "my first commit"
  13. create a repository on github with the same name using UI function( 內部測試,都設定為private模式)
  14. git remote add origin https://github.com/kayjean/Mytest.git
  15. git push -u origin master 輸入帳號密碼 完成上傳和sync的動作
  16. try to update sample.c or create a new file sample2.c
  17. git add .
  18. git commit -m "my xxx commit" 重複上面push
  19. 取消:commit前,取消先前add的內容可以使用 git reset HEAD [filename 包括目錄]
  20. 取消:commit後,git log --oneline 看到最後一個動作的號碼 git reset e12最後一次號碼d8ef^
  21. 下一階段就是增添ignore目錄
  22. 下載github專案,拷貝URL後,到目錄下git clone 網址,會新增加那個目錄
  23. 其他參考  連結一  連結二  連結三

    2018年10月26日 星期五

    單車漫遊:睽違兩年再上武嶺

    第二次上武嶺

    西進武嶺是許多單車騎士心心念念的挑戰路線,自己在二年前和交大一群同學騎過(連結),這個夏天應楊爸邀約,因緣際會參加2018 Never Stop,再度騎上了3275公尺的武嶺之巔。

    活動前一晚是睡車裡,自從有車用蚊帳解決空氣流通問題後,就習慣在郊山或路跑、單車等活動前睡在車裡,主要原因是這些地方多半地處偏僻附近民宿少,集合時間也早,汽車的移動性高,能同時解決訂房和報到問題,更少了寄物的煩惱,一舉多得。

    當天凌晨四點即起,車外路燈照耀下,通往霧社的省道已被熱身的車手們佔據,數個車隊把馬路當成訓練場,封街般的順向逆向反覆穿梭滑行,路邊則有不少團體大家都圍聚著聽所屬車隊最後的指示,看大伙都結伴同行,自己雖說是和楊爸同行,卻始終無法聯絡上他,感覺有點形單影隻。還好有過登頂經驗,就算是單兵獨騎也沒問題。

    熱鬧的開幕

    近五點,會場氣球門後,由上千台彎把公路車構成的景象,讓人嘖嘖稱奇。時間一到,只見綿延不絕車陣通過拱門後就奮力向前衝去。由此地至人止關距離約15公里,地形上是沿著眉溪旁平緩公路緩慢上行。

    漆黑中,左側的守城大山和右側舊武界越山只剩輪廓,卻讓人更覺得深邃和孤高,只剩前方車燈匯集成的光之道路消失在深處,回望,則是由後車燈光標誌著的點點來時路。忽然感覺到自己也是這光之路中的一份子,像是長河中,朝聖的行者,快速在黑夜中奔馳而去。

    人止關前,兩側山嶺輻合,眉溪也驟然縮減猛向右鑽入峰谷中。此處崇山峻嶺,山高水深,地勢自成天險,清末漢人和原住民在此多有糾紛,卻也都無法跨越對方雷池一步。清吏就在此劃定界線,要漢人止步,也就是人止關的由來。過此處後,高度漸次提升,前面熱身結束,真正爬坡由此開始,沿路各種坡,差別僅是大坡、小坡和變態坡的區別。

    人止關前

    六點三十分抵達霧社,天已亮,再往清境去,七點四十分抵達清境國小稍稍休息,以往對清境的印象就是滿山遍野的民宿,實際上,從清境國小到武界,距離足足有五公里,除民宿外,還散佈著許多製茶和種植高山蔬果產業。他們沿途奉送茶水和水果,幫我們打氣,真是衷心感謝他們。

    路邊小妹妹幫著送香蕉

    畜牧中心前美麗景致

    武界附近公路景緻

    八點五十分到梅峰補給站大吃大喝,美其名是為後續艱難路程儲備體力,實際要賺回報名費。而且梅峰後,路線由背陽面轉入太陽曝曬區,在坡度不減狀況下氧氣卻一直減,騎起來真的會有欲仙欲死的感覺,真的要多吃些啊。

    補給站前滿地的單車

    從這裡開始,我也開始使用最輕的齒輪比,直到武嶺前,也都維持這種狀態。尤其是過鳶峰後,坞速低到走路都比騎車快的慘況,許多參賽者都下車當步兵。主辦單位Never Stop的口號早就被拋進對面山谷,建議日後改名為Never GiveUp比較貼切。

    我不愛牽車,採取定點休息兼拍照的策略,騎騎停停中還是盡力保持著騎的姿勢。沿途也會發現,身旁的參加者,雖然互有超越,但經歷這麼長距離彼此體力相近也就是這些熟面孔,雖然沒有言語,但都心照不宣專心一意的向前騎(走),很有命運共同體氣氛。

    令人恐懼的髮夾彎

    總算在時限七小時前龜上武嶺,如此隨興不專業,裝備也僅是平把公路車又缺卡踏的中年大叔,能如此心無旁鶩的投入且不放棄,自己都覺得驚奇與感動。拍照後,找到楊爸,兩人結伴下山,回程並由他們夫妻請吃美味午餐,真是謝謝他們。

    高山草原

    回想活動過程,因是首次參加大型單車活動,自然會和路跑相比較,兩者在流程、補給、獎勵機制上都類似。對參加者來說,受到團體動力的砥礪,過程中也會不由自主的想要精進自己,締造佳績。

    以我來說,從昆陽到武嶺這段路,若非看著其他車友都認真騎,自己鐵定會拖延更久,或是看到同樣路程,有人竟能在四小時完賽,也湧起有為者亦若是的心情。若再年輕十歲,或許真的就會投入配速和迴轉速或功率計等裝備的精進。但人的注意力總是有限,聚焦在本職學能更會有方向感(也更有貢獻吧),單車部分就維持著歡樂騎的心,保持著探山涉水好工具。

    和楊爸合影


    彩蛋區  遊山玩水,首選非東進武嶺,最近開始計劃 新城海邊至武嶺,預估輕鬆騎也要十小時。參考如下
    他人記畫一  他人記畫二
    住宿

    2018年10月21日 星期日

    散文集:傳奇莫言


    書名會誤導人以為是介紹莫言生平,實則是將莫言所寫的鄉野傳奇故事彙集成冊,與讀過的蛙(筆記連結)和生死疲勞相比,塊頭雖小但同樣精彩。

    莫言的筆下世界,總是圍繞著故鄉高密的人民和黑土地。而鄉野間,最不乏,就是離奇故事和怪談。長篇小說生死疲勞中,莫言就大量將離奇故事溶入他中國式的魔幻文學中。寫起短篇文集,當然是淋漓盡致、得心應手。

    全書十一篇短篇,情節都不複雜曲折,描寫卻很生動,個人依故事素材區分成五種標籤。揶揄名利類,神嫖、良醫。神怪故事類,夜漁、翱翔。奇聞異事類,天才、地震、屠戶的女兒。愛情類,辮子、初戀。最後一類是對北大荒飢荒和鬥爭的描寫,糧食、靈藥。

    莫言文體簡潔洗練描寫人物感情細緻複雜,對景致的描寫更是脫俗動人,不過小說能成為有價值的文學作品,除前述外,往往更因為加入了作者的思想。與現今人們相比,民初時代人務農者眾,普遍有民智未開現象,個性上大多無奈且聽天由命。若外在環境如天災頻仍或戰事波及,生活上受到巨大壓力時,外多半是退縮認命,而少數個性鮮明主角,就顯得原始又生猛有力。

    我喜歡莫言故事,總是能透過不同的視角和回顧,不帶成見的,給讀者留下想像和自我判斷的空間,即使是短篇傳奇亦如是。

    2018年10月19日 星期五

    筆記:CNN及眾多應用

    將高雄港邊夜景逆時鐘旋轉,好像CNN範例

    • 深度學習概念(連結)
    • CNN及眾多應用(連結)
    • RNN及眾多應用(連結)
    • TensorFlow安裝(連結)
    • TensorFlow語法與使用(連結)
    • Porting AI ( QCS605 QCS603 Android )(連結)

    CNN


    卷積神經網絡(Convolutional Neural Network,CNN)的出發點是利用圖像的局部信息,例如局部模式如輪廓和邊界,通過「卷積核」作為中介,圖像通過卷積操作後仍然保留原先的位置關係。



    卷積(convolution)乍聽之下會聯想到天上美美的卷積雲,但那是美麗的誤會。以離散的觀念可看成是向量平移和加權疊加。若用連續的觀念,就是不僅僅與當前時刻輸入有關,也跟之前若干時刻的輸入有關,是之前時刻的輸入信號經過一段過程,對現在時刻系統輸出的影響,就要考慮各個時刻連續性輸入的影響(疊加)。

    y(n)=x(n)∗h(n)
    y(n)的序列表示成y(0) y(1) y(2)代表系統的反映信號。
    x(n)的對應時間的序列x(0) x(1) x(2)。
    所謂的影響可以是減弱或增加,但是影響的方式和強度可以更進一步變成。h(t)這個函數與x(0)相乘來表達,方式為x(m)×h(m−n)

    若是圖像處理,最常見的例子就是MASK運算,常見應用於濾波處理。用一個模板和一個圖片進行卷積,對於圖像上的一個點,和模板相乘,然後各點的積相加,就得到了這點的卷積值。對圖像上的每個點都這樣處理,可以消除噪點,強化特徵。


    用下面這個平均矩陣,來平滑圖像,高頻的信號就會被周圍的數值平均成為平滑山峰。


    整張圖形的做法,則是類似下面的計算方式。


    DNN將二維圖形,以一維陣列來表示,雖然有效,但喪失了圖像的結構和附近點的彼此關聯。CNN類似人臉辨識時使用Eigen想法。有些特徵不需要看整張圖片才能捕捉起來,也就是將圖片解析度降維的方法。下面是各種由簡單到複雜的CNN模型和應用。

    除了CNN畢竟有許多要



    NormalLenet5AlexNetVGG
    MNISTpart1part2part3
    CIFAR10

    part4part5

    part1


    來原

    MNIST利用CNN處理後,正確率可以提升到百分之九十九,效果非常顯著。test12.py (和範例相比較,74行有變動)。
    1. Max-pooling 這是為了確保經過 Convolution 後圖片中的特徵可以被確實保留下來而採取的方法。
    2. 不同的 Activation Function 先前在添加神經網絡層的時候,如果沒有指定 Activation function 就是使用預設的線性函數,但是在 CNN 中會使用 ReLU(Rectified Linear Unit)作為 Activation function,模擬出非線性函數,確保神經元輸出的值在 0 到 1 之間。
    3. 新增 Dropout 函數 用來避免過度配適(Overfitting)。
    4. 更換 Optimizer 將我們先前一直使用的梯度遞減(Gradient descent)更換為 ADAM,是一個更進階且更成熟的梯度遞減演算法。

    輸入圖片(解析度 28x28 的手寫數字圖片)
    第一層是 Convolution 層(32 個神經元),會利用解析度 5x5 的 filter 取出 32 個特徵,然後將圖片降維成解析度 14x14
    第二層是 Convolution 層(64 個神經元),會利用解析度 5x5 的 filter 取出 64 個特徵,然後將圖片降維成解析度 7x7
    第三層是 Densely Connected 層(1024 個神經元),會將圖片的 1024 個特徵攤平輸出結果之前使用 Dropout 函數避免過度配適
    第四層是輸出層(10 個神經元),使用跟之前相同的 Softmax 函數輸出結果

    part2


    來源
    運作為目錄test23,先安裝sklearn( pip install -U scikit-learn ),並且把MNIST_data部份資料移動到mnist/train-labels.idx1-ubyte 等四個
    依序執行
    python  lenet5_train.py 訓練
    python  lenet5_evil.py 產生評估結果
    python  lenet5_test.py 需要在工作目錄下,製造20個檔案,正確率70%,並有比較圖
    最後是進行特殊測試kaggle,參考文章
    https://www.kaggle.com/competitions 選擇digit recognizer


    選擇data - download all
    用google帳號登入下載了全部,將test.csv解壓縮後,放在工作目錄執行
    python  lenet5_kaggle.py 結果 result.csv但是沒有比對正確答案,先擱置

    part3


    來源



    Alexnet架構如上
    參考的說明位置  建立新目錄test24並且還要建立mnist並且把四個檔案拷貝進來,依序執行
    alexnet_inference2
    alexnet_train2
    alexnet_eval2
    正確率97%

    part4

    同樣是Alexnet架構
    參考的說明位置  建立目錄test25
    需要先下載檔案 位置  有三種檔案,下載的是  CIFAR-10 binary version (suitable for C programs) 解壓縮後在工作目錄下狀態是 data/cifar-10-batches-bin 有許多bin檔案依序執行
    read_cifar.py  連續跳出兩張圖片
    cifar_inference.py
    cifar_train.py
    cifar_eval.py 正確率66%

    part5

    VGG模型
    VGG架構
    參考的說明位置  接續前面測試test25 依序執行
    vgg_inference.py
    vgg_train.py
    vgg_eval.py 正確率 80%
    vgg_test.py  需要自己做出20張 32*32大小的飛機照片,文章提到測試效果不好(並沒有實際測試)

    Grad-CAM

    連結
    連結
    連結
     

    其他範例

    ImageNet範例
    蘋果中文字辨識範例
    下棋範例
    自動著色
    Prisma;CNN的過程中,可以讓系統逐步學習到畫作的風格,累積眾多分類答案後,就成為分類器。若在風格這個層次暫停,讓系統記憶風格資料。當輸入一張新的圖片時,讓CNN將新畫作和記憶的風格相比較,當然會有很大的差異,差異越大,表示風格越不同。但是若在這時後,修改畫作,減少差距。逐漸累積後,新畫作就會成為新的風格。這就是Prisma的精神。應用上可以參考文章。必須具備有VGG。

    CNN延伸應用,物體位置辨識


    能夠在一個畫面中,找到各個項目,有許多精彩的演進。參考資料。基本精神是用openCV的想法,利用Sliding Window找不同範圍,效差不佳,開始有以Bound為基礎的各種加速手段。
    1. R-CNN:先取出約2000個可能的區域。
    2. Fast R-CNN:在 R-CNN 中,2000 多個區域都要個別去運算 CNN,這些區域很多都是重疊的,也就是說這些重疊區域的 CNN 很多都是重複算的。所以 Fast R-CNN 的原則就是全部只算一次 CNN 就好,CNN 擷取出來的特徵可以讓這 2000 多個區域共用。先透過 selective search 預選 region proposals。
    3. Faster R-CNN:與其預先篩選 region proposals,不如從 CNN 的 feature map 上選出 region proposals。實做的方式可以參考這個
    4. Mask R-CNN:使用FCN概念,建構於 Faster R-CNN。

    YOLO


    很娛樂化的名子,能在前面這麼多精彩論文下,開闢出新做法,並且大幅提升辨識率速度,雖然正確率不是最前段班,但考量速度這個因素,已經很難得。

    方式上,揚棄了bound的概念,是將整張圖視為一體進行訓練和測試。一開始不太能體會他的想法,後來漸漸掌握到,它每格的大小是固定的。每格內容不包括格子和整張圖的相對位置,而是和這個類別的相對資訊,還有框的大小,還有分類機率值。原本以為它和同一畫面中其他物件有關係,後來才發現那是錯誤的想法。

    後續的YOLO 2和3 還有更好表現。

    這是論文的原文版中文版概念介紹1概念介紹2  非常棒的演講 。很好的說明1 說明2

    實作部分,先建立tensor/yolo目錄,下載入門專案的code,解壓縮,依照指示就可完成。有幾點要記錄。

    1. 目錄在tensor/yolo
    2. train後的內容是以ckpt方式儲存,存放位置在model/中
    3. 如果下載已經預先訓練檔案 pretrain ckpt file ,移動到model/pretrain目錄後,直接執行就可以看到成果。test:python demo.py
    4. 如果依照pascal-Voc2007從無到有開始建立,過程包括下載檔案,放置到正確位置
    5. unzip pascal-Voc2007 train data and test data into the same folder / data ( train and test mixed together )  file1 file2  prepare a folder "VOCdevkit2007"  mv VOC2007 to "VOCdevkit2007"
    6. 開始執行,python tools/train.py -c conf/train.cfg
    7. 程式中設定是執行一百萬次,在目前機器上,大約一萬次一小時,中間中斷半成品也可以測試歐,只是準確率較低,也不知道能否接續訓練
    8. 未來,自行訓練需要格式。既然有pascal-Voc2007的執行範例,會發現前面有段先製作業,將資料轉換成需要形式,也就是說,未來可以訓練自己的資料格式 convert the Pascal-voc data to text_record file (python tools/preprocess_pascal_voc.py )
    隨便以chair為例,成功框出區塊


    程式碼對應說明:文章1 文章2   文章3  文章4
    其他git:  git  git