手書き数字認識を行う際、MNISTを使用しますが、現実のデータはデータセットほど綺麗に正規化されていないためうまく認識できないことがあります。

Kerasの標準のサンプルでは、精度は98.40%ですが、ImageDataGeneratorを使用していないため、一部がクロップで欠けているような画像ではうまく認識できなくなります。

mnist_mlp.py

対して、以下のサンプルでは、精度は99.55%になります。ImageDataGeneratorを使用しており、width_shift_rangeやrotation_rangeを使用しているため、汎化性能が高くなっています。また、Pseudo Labelingにより学習データを増強しています。こちらはコンペとしての性能を上げるためであり、汎化性能への寄与は少ないものと考えられます。

MNIST_keras_CNN-99.55%25.ipynb

こちらだと、概ね、多くの手書き文字を正確に認識します。現実のアプリケーションでは、数値的な精度差以上に性能差が出ることがあるのは意識しておく必要がありそうです。

ちなみに、CapsNetは99.66%のようです。

CapsNet-Keras