Joel Grus — FizzBuzz in TensorFlow

從網路上看到的幽默問題,算是一個很有趣的使用,適合在做完 Classification 後練習。

輸入資料處理和原版程式碼一樣,因為還蠻直觀的:

  • 1 – 000000001 – [0 0 0 0 0 0 0 0 1]
  • 2 – 000000010 – [0 0 0 0 0 0 0 1 0]
  • ………

輸出則是用 [1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1] 來代表四個分類。

輸入輸出都是一個矩陣的形式。利用兩層 hidden layer 分別是 512 和 256,激勵函數選擇 relu,剩下的就交給 tensorflow 分類。

結果

一開始一直分不出來,都會卡在把每個資料都判定成同一類 (0.533)。後來減低每次訓練丟進去的量就 OK 了 (忘記一開始做分類時也只丟一點點進去)。

tf_fizz0

卡在 0.533 代表他受非 5 非 3 倍數的值影響很大,畢竟是機率最高的地方。也看成是 local minimum,要跳出去就是使用 batch。

這是有加入 0.8 dropout 的結果,可以看到訓練跟測試差不多,而且很快就達到 1.0 的準確率。

My GitHub