2020年1月21日 星期二

臨摹

夢的一開始,忘記為啥了,反正是在一個圖書館,好像是參加什麼活動,幫忙整理館藏。

照著索引,把很多東西放到該放的地方,那個圖書館,除了書,還有很多書以外的東西,一些藝品之類的。

然後還有辦展,辦藝文活動。那天我們幫忙整理完館藏以後,就去參加活動,其中一個活動好像是畫圖,臨摹之類的。但是我們沒有畫畫的道具。然後我記得整理館藏的時候,有看到畫畫道具。

那個是可以借來用的,我就去拿來用,那個畫畫道具,是放在一本書裡面,那本書很特別,他雖然叫做書,但是每一頁間隔都很大,裡面夾了很多東西。有一些腰帶之類的設計,可以把很多小東西掛附在書頁裡面。

所以那本書也沒有幾頁,每一頁,就是一個藝術家的作品,還有很多小東西,實體的,像是我要借的那一頁,就是有那個畫家的水彩跟筆,還有很多他的小雜物,書頁也貼了一些他的畫,都是那種開開心心很夢幻的東西。

都有用一些很俏皮的字,寫著一些很快樂的語句,比方說在雨中跳舞阿之類的。

我借了畫筆跟水彩,畫完了以後,就要把東西拿去夾回去,然後想說,那我也來臨磨一下他的作品好了,所以我就開始畫,畫的過程,我感覺自己非常投入,我臨摹的成果幾乎一模一樣,我都覺得很不可思議,自己竟然畫的這麼好。我感覺我完全走入那些畫的心境裡面去了。我感覺此時此刻,我跟那個畫家同調了,我感覺她的靈魂就在我身上,我們兩個這個時候一定有著同樣的感覺。我似乎能感受到她在想什麼,聽到什麼,看到什麼。彷彿我就是她

那是一個靈魂的高度同步…

然後突然我看到了好多東西,在她的畫裡面,有很多東西,是乍看看不到的,非要是她自己,才能看到。

然後這個時候,我發現,她的畫,都是看起來很開心,但是其實會在某個小小的角落,有一個小小細解,藏著一個隱喻,一旦看懂那個隱喻,整個畫頓時會有完全不同的解讀。

每幅畫都是一個巨大悲傷。一切都是這麼的沈重跟悲傷。然後因為我就是她,那瞬間我突然被巨大的悲傷包住。

然後那書頁裡,除了畫具,還有各種雜物,其中一個,是一個那種晶片鎖,就是碰到門感應會開的那種。

上面有著手寫的超可愛字體,寫著「跳~就沒事了~」

因為感覺很可愛,我就大聲的念出來~跳~就沒事了!

突然感覺到好開心。

圖書館裡面,周圍的人聽到了,也跟著我一起喊「跳,就沒事了~」突然一切都好開心,我感覺自己被這個小東西深深的感染了情緒~

然後我就在想「為什麼晶片鑰匙會在這邊阿?她怎麼不用了?是用不到了嗎?她為什麼用不到了???」

然後我看懂了。

然後因為高度的同步化,我突然被 100% 的絕望感吞噬。看著門口外面的走廊,是在高樓的走廊,牆很矮,一下就可以跨過去,我只要……跳,就沒事了。

就在那瞬間,我嚇死了,因為,我就是她,我的心境已經完全跟她一樣,我一定會自殺,我一定會自殺,我一定會自殺,我一定會自殺,我真心的相信我一定會自殺。我全身麻痺,我感覺到我的心臟嚇到麻痺了。我嚇到不能動,躺在地上,我聽到周圍的人在叫我。可是聲音越來越遠。我慢慢感覺不到他們了,我對外界的感官封閉了,我沉到了自己的世界裡面。

在我的世界裡面,我躺在一張床上,依然全身麻痺,不能動。

是我的床,在永和的床,我醒了。

全身麻痺,一個夢境到現實的無縫接軌,然後夢中對於生命的放棄跟絕望感,也無縫接軌的留了下來……

媽的是禮拜天早上,我從來沒有「煮飯好累我不要去」可是那天,我真的不想去,我不知道我為什麼要去上煮飯課。

生命到底要幹嘛?我也不知道我潛水要幹嘛?

那天之後到現在,我從一個什麼都想嘗試的人,突然被抓進自殺畫家的自我裡面……

2019年6月28日 星期五

廟裡打坐的和尚

忘了是跟誰,但總之不是我自己一個人。到了一個類似寺廟的地方。應該是去玩吧,類似體驗寺廟生活,像是要打坐之類的,除了我們,還有很多其他人。寺廟晚上能讓人寄宿來著。不過有的人晚上並不在睡房睡覺,可以選擇在大殿打坐。

其實應該說,有很多人選擇在大殿打坐。人數很多很多,大殿挑高可能有十米,然後牆面從低到高被設計成像是書櫃一樣的一層一層的,有十多層,每一層大概都是一個人盤腿以後可以坐在裡面的高度。然後,大殿的牆壁其實是被坐滿的,也就是說有滿滿四面牆的人在那邊打坐。白天的時候,有一些人會下來,會有空位,但到了晚上,一定會被坐滿,可是白天也不是所有人都會下來,會覺得「是不是有人一直都坐在上面阿?」裡面大部分的人都已經剃髮了。

半夜睡到一半,醒了,覺得是有什麼聲音,跟尿意混合在一起,讓我醒了。於是起來去廁所。要回房間的時候,聽到大殿傳來類似有人講話的聲音。便走了過去。到了大殿門外,便透過微微搖曳的燭光,看到牆上滿滿的人,微微搖曳的燭光,映著幾百個人沒有表情的臉。

我聽到哭聲,還有人說話的聲音「快把他換掉,不然他就吵醒別人了」從右邊傳來。

於是我稍微走進去,轉頭往右邊說話的聲音看去,是從旁邊那處,有兩個寺廟的工作人員正圍著一個打坐的人,其中一個人只是站在旁邊看,但另外一個工作人員的姿勢很怪,他背著我,兩手抓著那打坐的人的肩膀,遮住了打坐的人的身體,工作人員的頭,在打坐的人的頭的位置,並不是靠著,而是重疊,就像是那人已經沒有頭了,而工作人員正在啃食他。

時間不夠我看清楚,才不到一秒,左邊傳來聲音「你醒啦?」我往左邊一看,是住持,這邊的住持非常年輕,是個十多歲的小孩,住持站在大殿門口的位置,距離我大約十公尺,穩穩的站著。我嚇了一跳,又往右邊看去,發現那打坐的人已經坐在本來的位置上,但是卻只剩下站著的那一個工作人員了,本來抓著打作人的那個不見了……不對,那個打坐的人,怎麼這麼像那個工作人員?「他被吃了?被換掉了?」的念頭瞬間在我腦海浮現。我再往左邊看去,住持還是穩穩的站著,但距離我只剩下五公尺。「他正在靠近我……」我往右邊看,看到本來站著的那個工作人員也還是穩穩的站著,但是也距離我更進了「他要抓我……」

我不再往左邊看了,立刻轉身就跑。

「他跑了!」

幹!這間寺廟會吃人!他們會把來這邊參訪的人吃掉,然後替換掉,然後坐在大殿的牆壁上,靠,那些裡面很多都已經不是人了!都是妖怪!幹,殺小!

我聽到後面來拼拼砰砰的聲音,很多人從高處往下跳,落地的聲音。我一轉頭,看到一狗票臉上沒表情的人,穿著袈裟,落地,在搖曳的燭光中向著我跑過來。跑,我跑。我往寺廟後面睡房的方向跑,然後把朋友們叫起來,大家在混亂中亂成一片,最後只有幾個人跟到了我。我一直跑,跑到寺廟後方有很多小建物,大多是寺廟用來當倉庫堆東西的,找了一間,跟我的朋友鑽了進去。只剩下一個朋友了,嗚嗚,其他的都已經被抓走了

進去以後,是一個很奇怪的小房間,這個小房間的牆壁超級多,根本就是一個超小迷宮,由牆壁構成的超小迷宮,走到都很窄很窄,只能一個人走,牆壁就摩擦到肩膀,我只好拉著朋友在這個迷宮裡面鑽,鑽著鑽著,我突然覺得「靠,我認得這個地方,這個地方的盡頭,會有一個往下的密道」。我聽到外面好多的聲音,那些妖怪正在搜捕我們。阿,我聽到門打開的聲音,他們進來了,就要抓到我們了!我拉著朋友趕快往彎彎曲曲的道路裡面走,走到最後,路變個更窄,已經無法正面通過了,只能側著身體硬擠進去一個窄縫,然後縫的最近頭,的地上,有一個小洞。

那些妖怪和尚已經追來了,他們因為都沒吃飯,臉都很瘦,身體也很瘦,在狹窄的空間裡面移動的比我們還要快,一下就追到我們了。

我們很艱難的鑽了進去小洞,然後我就放心了,因為我知道(我也不知道我是怎麼知道的但我就是知道)這邊進來以後,會進入一個空間,這個空間是有神在顧的,進去以後,是一個四面牆壁都亮著白光的廣大空間,果然看到一個人,他說「你們在逃命,我都知道了,不用擔心,這是我的地方,他們進不來的。」可是這個房間沒有出口,我問神們能去哪裡,神仙沒有理我。他的意思是我的格不夠,所以他沒有要回答我這個問題。

我跟我朋友說「只剩下你了嗎?我們怎麼辦?」神看到我朋友以後,打量了一下,突然整個人變得很恭敬,對我朋友說「你有神格。你本來就是神,而且自己跑去當人,為了作善事。你修了很多業,累積的陰德本來這世是要當神的,但你自己立願要再當一世人來助人」

神說完以後,有一塊地板浮了起來,是個隱藏在地下的電梯,門打開了,神叫我們兩個進去,神跟我說「你本來是沒格進去的,你是好人,但還差一點點,托你朋友的福,你才能進去,因為他就是來助人的」

電梯向下。

這是一個玻璃電梯,可以看到外面的那種,可是我們的周圍一直都是岩石,黑黑的。下了不知道多久,幾個小時吧。還在下,我覺得我應該是要到地獄去了。這段時間就跟朋友聊天,也不知道能幹麻,然後想說我是不是我要去地獄了。唉。

突然四周出現了光亮!是天空!我們從一個奇怪的浮在天上的石頭的底部往下冒出來了,是白天,是天空!好亮阿!電梯向下,我們在空中一直向下,最後電梯終於落地了,是在一個公園,我認出來,是大安森林公園。天那,我們終於回到文明世界了……

朋友說她要走了,她說她好像有點想起來自己是誰了,她要去作她想做的事情了。於是我在大安森林公園,看著熙來攘往的人群臉上洋溢著幸福的笑容,覺得這場景好不現實阿。

2019年2月26日 星期二

一個奇怪的夢

夢的開頭是,我醒了,在一個周圍都是樹的有庭院的日式房子裡面。全身是傷,有個女生在照顧我的傷勢,我不知道自己為什麼會搞成這樣,什麼記憶都沒有。每天因為全身都痛,也不能動,我就是躺在地板上看著周圍的樹木,隨著風搖動。那個女生話不多,她白天都要去旁邊的田裡面工作,所以除了照顧我以外幾乎都在忙,要砍柴,要種田,要維修房子,因為是木頭的其實很需要修理。夢裡面我是話很少的人,她話也很少,我們都很少講話。

周圍似乎都沒有別的人家,就她自己一個人住在這裡,不知道為什麼。也不知道被照顧了多久,後來身體能動了。我沒地方去,因為我什麼記憶都沒有了,從哪裡來的也不知道。就幫她一起下田、作家事、砍柴、修房子,還有一個我有幫助的,就是我很擅長沒有聲息的移動,所以打獵很成功,以前她很難吃到的肉,現在也都有的吃了。我體格很好,這些事情我作起來超拿手的。

就一起生活,她話不多,也很少講自己的事情,我也沒有問,我只是覺得生活就是這樣一天一天,好像也很好。就這麼過了不知道多久,也許是幾個月,感覺習慣了,這就是我的人生了。雖然不知道我本來是怎樣的人過怎樣的人生,但現在的人生很好,很幸福。我們兩個每天都過得很開心,她也很常笑,我也是。

有一天晚上睡覺睡一半,我頭好痛好痛,越痛越來有很多奇怪的畫面閃過眼前,好痛好痛好痛!阿阿阿阿好痛好痛好痛!我好像想到很多東西,我好像想起來發生什麼事了……

我是一個組織的殺手,類似忍者之類的東西,因為背叛組織,所以被追殺。我逃了好久,但是最後還是被派出來追殺我的殺手們找到了。在被追殺的過程,我把來追殺我的那一票殺手全部幹掉了,但是自己也受了重傷。最後在樹林裡面逃啊逃,逃到這棟房子以後氣力也放盡,一放鬆就昏過去了。(怪不得我體格這麼好,種田劈柴幹嘛的都超順手 XD)

醒過來了 @@ 看著天花板,所有的事情都想起來了。完了,根據我對組織的了解,他們不可能放過我,那些人全部被我幹掉了,他們沒有回去回報任務成功,組織一定會再派出人來找我。找到我只是時間的問…

我聽到了…周圍的樹林裡面有人…天花板上也有人…他們已經找到我了…他們正在慢慢靠近,有很多人,很多人……如果她現在醒過來,她一定會死,如果我留在這邊,她一定會死…我沒有辦法跟她說再見了……

我沒有聲息的起來,小心的看著她的臉,確定她沒有被我吵醒。我聽得很清楚,他們正在慢慢的靠近,我穿好衣服,拿起受傷時落在身邊的刀現在被收好的刀,跑進周圍的樹林,一直往前跑,一直往前跑,離房子越遠越好。我聽到後面有好多聲音跟來了……那我就放心了……

2017年7月12日 星期三

Boost.Python 小記

建構子

沒有建構子的 class 要在宣告 mapping 的時候給建構子的 prototype

std::vector<>

跟 python 對接的陣列,要用  boost::python::list 

Overloading function

使用「明確轉型」來指定特定的 overloading 版本

import_array()

使用 numpy 要  import_array()  ,不然執行期用  PyArray_SimpleNewFromData()  建立陣列的時候會 segmentation fault。特別注意的是  import_array()  其實是一個陣列,他會去初始化一個 static variable 叫做  PyArray_APIPyArray_API  是一個 compile unit static variable,所以每一個 .cpp 檔自己都要  import_array() ,但重複 import 又會錯,所以呼叫前要先檢查  PyArray_API  這個變數是否已經被設定。

if (PyArray_API == NULL) {
    import_array();
}


2017年6月28日 星期三

tf.slim deploy trained model

用 tf.slim train 好了 model 以後,要拿來做 inference 才發現腦袋不大清楚不知道怎麼弄,查了一下,看到這邊,原來 tensorflow 本身就有提供 freeze 的工具,slim 也有 script 讓使用者可以方便的 export model。

照著註解裡面步驟做就可以了,兩步,橫簡單,連我都會。

昨天浪費了我幾個小時在那邊摸索,真的很笨。不知道昨天為什麼突然忘記「開始動手做之前先看看別人怎麼做」我的天哪...

[0] https://github.com/tensorflow/models/blob/master/slim/export_inference_graph.py

2017年6月22日 星期四

TF.slim 吃自訂格式的 data

Tensorflow.slim 預設是吃他 TFRecord。但我的圖很多,我不想全部轉成 TFRecord,這樣會吃掉很多硬碟,我想要保留 .jpg 的檔案在硬碟裡,然後有一個文字檔,裡面描述了哪些檔案有哪些 label。

0.jpg -1:* 1:0,7  
1.jpg -1:* 1:1,2,4...

表示 0.jpg 這張圖,有第 0 個 label 跟第 7 個 label。這兩個 label 是 1,其他都是 0。然後 1.jpg 這張圖,有第 1 第 2 第 4 個 label,其他都沒有。至於總共有多少 label,在描述 dataset 的 .py 檔會有寫。

slim 有自己的 reader class,有做了 parallel reader,對於需要大量訓練的時候可以加快 read data 的時間,但是 reader 讀進來之後,decoder 卻只有一個人。如果 decoding 需要很多時間,那這邊就會有問題。為了繞過這個問題,我決定把 reader 跟 decoder 合併在一起。

我根據 slim 的 parallel_reader.py 加了一個 parallel_reader_decoder.py,multi-thread 在讀取檔案以後,同時就會去 decode,之後才放進一個 common queue 讓之後的 node 取用。

這邊註記幾點:
  1. 寫 decoder 的時候,真的要注意效能問題,本來我用很 python 的方法在處理 numpy 陣列,後來發現效能慘不忍睹,改用 numpy style 以後 performance 快了幾百倍。
  2. tf.py_func() 就很好用,不一定要用 C++ 去寫 Op,當然如果真的需要就不要偷懶。
  3. tf.losses 會幫忙把 loss 登錄到 GraphKey.LOSSES,之後會有人去取用,所以不要覺得好奇怪為什麼這個 loss 都沒有人用到
  4. 記得把 slim 的 preprocessing thread 的數量也開到對,不然你會發現 reading 夠快,decoding 夠快,GPU 的 forward computation 跟 backward propagation 也夠快,但是 throughput 就是有夠低。最後發現是死在 preprocessing thread 數量太少。這個數值跟你的 model 所需要的 preprocessing 複雜度有關。mnist 的 preprocessing 很簡單,一個說不定就夠了,inception 可能要 4(或 8?)。
  5. slim 裡面有幾個 queue,queue capacity 記得要改到夠大,pop 以後的 min-size 也要調整(小),不然你會發現他一批一批的做,比方說你 queue capacity 是 16,min-size 卻是 8,但是你有 8 個 clone,這樣他一次要吃掉 8 個,吃完以後這個 queue 的 producer 才會做事,很不方便。這樣這個 queue 等於沒有 buffering 的效果。
    1. Filename Queue (after enumerate files)
    2. Parallel Reading Queue (after read)
    3. Prefetch Queue (after preprocessing)
    4. Batch Queue (after batch packing)
  6. 開太多 preprocessor 的話,tensorboard 秀 graph 會 gg =_=||
  7. sigmoid_cross_entropy 不要亂餵,他的值域就是 0 ~ 1,雖然我自己的 multi-label 標注方法是 1 positive, -1 negative, 0 don't care,但計算的時候,不要去把 logit 轉換到 -1 ~ 1,而是要把 label 從 -1 ~ 1 轉換成 0 ~ 1(但是 label 真的是 0 的時候,要記得 don't care)用tf.abs 跟 tf.maximum 可以做到。不難。
腦子不管用了,剩下的等想到再寫

2017年6月18日 星期日

tensorflow 自訂 operator

考慮開發速度的話,先使用  tf.py_func  [0]
如果遇到限制,或是考慮執行效能的話,再去看 Adding a New Op [1]

雖說 [1] 比 [0] 麻煩,但其實也相當簡單,不用害怕,進去看著照做就可以了,半個小時的事情

[0] https://www.tensorflow.org/api_docs/python/tf/py_func
[1] https://www.tensorflow.org/extend/adding_an_op