back to index
ML Lecture 9-3: Fizz Buzz in Tensorflow (sequel)

link |
所謂的硬券的意思就是說,看起來好像不能券的東西,但是我們還是用券的方法來解決。這個就叫做硬券,或者叫做硬券一髮。
link |
如果你看一下這個,這個是一個部落格,這個部落格裡面有一個Visbots in TensorFlow的故事。有一天有一個人,這個人好像還蠻知名的資料科學家,他去面試。
link |
然後人家說,好,那我們來考一下程式能力吧,在台版上面寫程式。然後人家就問說,你會不會來寫一下這個Visbots的程式。那Visbots是什麼意思呢?Visbots的意思是說,現在讓你quit一串數字,比如說一到一髮。
link |
但是呢,如果這一串數字裡面,那個數字可以被三整除,你就Output B,被五整除,你就Output F,它同時可以被三和五整除,你就Output B。
link |
所以你的程式Output應該是1,2,然後3可以被三整除,所以Output B,然後4,然後5可以被五整除,所以Output F,然後Output B,然後7,8,B,F,11,F,B,然後3,4,B,F。
link |
你大概Output這樣一個Default,但我知道對大家來說這是一個非常簡單的問題。那那個人就說,好,怎麼做呢?我要用Python做,那我要先input一些Library,正常嘛,我先inputTensorflow。
link |
然後,接下來呢,我要準備一些TrainingData,你叫我Output 1到100,那我們當然不能用這個當TrainingData,所以我先要Label 101到1000的Visbot這樣子,怎麼做?你去Amazon上找,你去AMP上找人Label就好。
link |
Label好以後,我們就弄一個Network給他Train下去看看結果會怎麼樣。然後呢,他後來Train下去以後,正確率才八十幾,然後他就沒有得到那一份工作。
link |
我決定來自己試一下這個Visbot的東西到底能不能夠做得起來,我覺得自己來實做一下。首先呢,我們先來看一下我們的TrainingData長什麼樣子,開一下我的iPython,然後Run一下。
link |
好,那我現在呢,就對數字101到1000做了Labeling,你就不要管那個Label是怎麼來的了。
link |
我們先來看一下我們的TrainingData,那TrainingData的Input每一筆呢,就代表了一個數字,我們先看一下它的Shape,總共有九百筆Data,就是從101一直數到1000,總共有九百筆Data。我們把第一筆DataDump出來看看。
link |
好,那每一個數字我們都是用二進位來表示它,每一個數字我們都是用二進位的數值來表示它。
link |
那第一個數字是101,101用二進位來表示就是1010011000這樣子。第一個數字代表的是這個2的0次方、2的1次方、2的2次方、2的5次方、2的6次方,你直接把它加起來就會發現說它確實就是101這樣。
link |
然後如果102的話就是這個樣子,103的話就是這個樣子。好,然後我們看一下Label的Data,Label的Data長什麼樣子呢?比如說101它可以被三整除嗎?不行,它可以被五整除嗎?不行,所以它是Output原來自己的數字。
link |
那我們現在總共有四個class,這四個class分別代表了Output原來的數字,OutputFees,OutputBugs,OutputFeesBugs。那如果Output原來的數字就是第一位是1,其他都是0。所以101的話第一位是1,其他都是0。
link |
接下來我們考慮說Output102,那如果102的話它可以被三整除嗎?可以被三整除,但不能被五整除,所以應該OutputFees。所以它是第二位是1,其他都是0。
link |
好,就這樣子,運作一下。我這邊用的Network架構跟面試的時候用的Network架構是一樣的。Input十維,一個Hidden Layer,就是一百個Neural,然後Apply IELU的Activation Function,Output四維,然後Softmax,然後用Addon這樣子,把這個拿掉。
link |
好,那等一下就直接print一下那個正確率,跑一下。
link |
好,很快啊,很快。沒多少才九百比training data,秒券,秒券。哇,就正確率是76%,做出來也不是一百。
link |
但是我不會就這樣放棄,因為你想想看,你看看你的training data,你的training data的正確率才八十percent而已,代表說你還沒有讓你的Network真的在training data上面學起來,它還沒有真的去fit那個training data。
link |
我們知道說做Deep Learning的起手式是先想辦法fit你的training data。怎麼fit你的training data呢?開一個比較大的Network。舉例來說,我們把Hidden Layer的size改成一千,然後再train一下,也是很快,秒train。
link |
然後這個accuracy你看現在上升起來了,可以跑到一百嗎?跑到一百了,來看,正確率就是一百percent,要我就拿到那個job了。