PythonとKerasによるディープラーニング
PythonとKerasによるディープラーニングを読みました。Kerasの作者が書いた本だけあって、非常に分かりやすく書かれています。Kerasの楽できる関数群をフルに使って、短い記述で定番のニューラルネットワークを動かすことができます。単にニューラルネットワークの説明だけでなく、データの内容を確認したり、学習結果をグラフにプロットしたり、もう半歩先まではコード付きで解説があります。
本のレベルとしては、最初の一歩の次に進める本です。CNNを使った識別や、LSTMを使った未来予測など、やりたいことがはっきりしているのであれば、ショートカットとしてとても役に立ちます。Pythonこれからという人には、ちょっと厳しいと思います。
この本を読んで手を動かしていけば、例えばニューラルネットワークがどこを見て猫と判断しているのかをわかりやすくするヒートマップも、Kerasを使って簡単にできるようになります。
こんな感じですね。識別の部分も含めて、これくらいのコードで実装できます。
model = VGG16(weights='imagenet') preds = model.predict(x) print('Predicted:', decode_predictions(preds, top=3)) last_conv_layer = model.get_layer('block5_conv3') cat_output = model.output[:,386] grads = K.gradients(cat_output, last_conv_layer.output)[0] pooled_grads = K.mean(grads, axis=(0,1,2)) grads = K.function([model.input], [pooled_grads, last_conv_layer.output[0]]) iterate = K.function([model.input], [pooled_grads, last_conv_layer.output[0]]) pooled_grads_value, conv_layer_value = iterate([x]) for i in range(512): conv_layer_value[:, :, 1] *= pooled_grads_value[i] heatmap = np.mean(conv_layer_value, axis=-1) heetmap = np.maximum(heatmap, 0) heatmap /= np.max(heatmap)
一方、Kerasの弱点として、型から外れると使いにくいというのもあり、ちょっと難しいことをするとこの一冊だけではきついです。
ちょうど昨年末にQiitaに闇のkerasに対する防衛術という記事が上がってました。Kerasが想定していることと違う事をしようとすると、まだまだ情報が足りなかったり、見つけた情報も更新が速すぎて古かったりします。何か新しいことをするというレベルではなく、まず手持ちのデータで識別から始めたいという人におすすめします。