本日は Keras の小ネタ。
Kerasで書かれたコードを読んでいるとふと気がつくことがある。 それは、Conv1D と Convolution1D、MaxPool1D と MaxPooling1D という同じような名前のクラスが出てくるのだ。 一体これらの違いは何なのだろうか?
公式ドキュメントには Conv1D と、MaxPooling1D だけが書かれている。 しかし、実際には Convolution1D と MaxPool1D を同じように使うことができる。 これは一体どういうことなのだろうか?
プログラマ的に気になるので調べてみた。
結論
結論としては Conv1D と Convolution1D、MaxPool1D と MaxPooling1D に違いはない。 Kerasのソースコードを読むと、どちらもエイリアスとして使えるようになっていることがわかる。
また、実際にそれぞれを is演算子 で比較してみると同一であることがわかる:
>>> from keras.layers import Conv1D, Convolution1D, MaxPool1D, MaxPooling1D >>> Conv1D is Convolution1D True >>> MaxPool1D is MaxPooling1D True
Keras 1.0 のドキュメントを読むと、昔は Convolution1D であったことがわかる。 ということは、何らかの理由で Conv1D という名前に変えたが、後方互換性のためにエイリアスとして Convolution1D を使えるようにしているのだと思われる。
おわりに
Keras の Conv1D と Convolution1D、MaxPool1D と MaxPooling1D に違いはないことがわかった。 したがって、どちらも安心して使ってよい。 ただし、今後のことを考えると、公式ドキュメントに書かれている Conv1D と MaxPooling1D を使っておいたほうが良いだろう。