Google的TPU到底支不支援LayerNormalization?

答案:支援,但是在資料維度為3的時候會出錯

錯誤訊息是UnavailableError: Socket closed

而且之後那台TPU就連不上了(我猜是當掉https://github.com/tensorflow/tensorflow/issues/41106

答案:支援,但是BatchSize必須為32的倍數

要注意的是TPU會把資料分散在8個不同的運算核心上路

所以在一個核心上的BatchSize=32
代表餵給TPU的BatchSize=32*8=256

實際上在TPU的BatchSize必須要是256的倍數
https://github.com/tensorflow/tensorflow/issues/42228

無效的做法:把tf.int64改成tf.int32

但是TPU的確不支援tf.int64
https://github.com/tensorflow/tensorflow/issues/36996

注意tf.train.Example只支援tf.int64,不支援tf.int32
所以型別轉換是必要的

為什麼不改用BatchNormalization?

因為在BatchSize小和輸入長度不一的時候, 使用BatchNormalization的效果不好
https://zhuanlan.zhihu.com/p/54530247

--

--