前提・実現したいこと
下記を参考にGrad-CAMの可視化を実装しようとしています。
(VGG16の全結合部を作り替えた自作モデルで画像2値分類)
参考ソース
発生している問題・エラーメッセージ
実行するとほとんどの画像でheatmap画像(配列)が全て0になります。おそらく
grads = K.gradients(african_elephant_output, last_conv_layer.output)[0]
の部分でgradsが極小値のため0になっていると思うのでgrads(tf.Tnsorオブジェクト)の中身を表示したいのですが、方法がわかりません。
該当のソースコード
python
1import tensorflow as tf 2import keras.backend as K 3from keras.utils import multi_gpu_model 4config = tf.ConfigProto() 5config.gpu_options.per_process_gpu_memory_fraction = 1.0 # 割合 6config.gpu_options.allow_growth = True 7GPU_LIST="0" 8config.gpu_options.visible_device_list=GPU_LIST 9sess = tf.Session(config=config) 10K.set_session(sess) 11import keras
python
1african_elephant_output = model.output[:, np.argmax(preds[0])] 2last_conv_layer = model.get_layer('block5_conv3') 3grads = K.gradients(african_elephant_output, last_conv_layer.output)[0] 4pooled_grads = K.mean(grads, axis=(0, 1, 2)) 5iterate = K.function([model.input], [pooled_grads, last_conv_layer.output[0]]) 6pooled_grads_value, conv_layer_output_value = iterate([x]) 7for i in range(512): 8 conv_layer_output_value[:, :, i] *= pooled_grads_value[i] 9heatmap = np.mean(conv_layer_output_value, axis=-1)
試したこと
K.get_value(grads)
K.eval(grads)
with tf.Session() as sess:
grads_result = sess.run(grads)
print(sess.run(grads_result))
等をやってみましたが正常動作しませんでした。
jupyter notebookでkerasを使っているときにtf.Tensorの中身を表示する方法はないでしょうか?
補足情報(FW/ツールのバージョンなど)
(tensorflow:1.13.1, keras:2.2.4, Jupyter Notebook)
あなたの回答
tips
プレビュー