自然言語処理の深遠

Deep Dive Into Natural Language Processing

Keras の Conv1D と Convolution1D、MaxPool1D と MaxPooling1D の違い

本日は 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 を使っておいたほうが良いだろう。