[Python CNN Grad-CAM]
CNNの画像にノイズを加えたものの特徴マップをGrad-CAMをを用いて可視化することを目標としています。
ノイズを加える前の画像は可視化することができましたが、ノイズを加えた後の画像は、同じプログラムでは実行できませんでした。
ノイズなしの場合は、[1,28,28]の三次元、ありの場合は[28,28]の二次元配列です。
以下がエラー箇所のプログラムです。
画像データの引数はdataです。
data.shape[2]
でエラーが発生します。
二次元配列のデータはそのままで、軸を増やせば解決できると思うのですが、どうすれば次元を増やせるでしょうか。
ご教授よろしくおねがいします。
以下の二行目がエラー部です。
python
1data, label = trainset[0] 2input_data = data.view(1, data.shape[0], data.shape[1], data.shape[2]).to(device) 3 4# モデルで予測 5# confidence: 信頼度、 predicted: 予測ラベル 6# (今回は、torch.max(, 1)でTop1の情報のみを取得 7output = nn.Softmax(dim=1)(model(input_data)) 8confidence, predicted = torch.max(output.data, 1) 9 10# GradCAMオブジェクト生成 11gcam = GradCAM(model=model) 12 13# 画像を順伝搬 14_ = gcam.forward(input_data) 15 16# 予測ラベルを元に逆伝搬し、勾配を計算 17single_predicted = predicted.view(1, predicted.shape[0]).to(device) 18gcam.backward(ids=single_predicted) 19 20# 指定の層の勾配マップを取得 21#(各層の名前は、print(model)で参照可能) 22regions = gcam.generate("conv1") 23 24# tensorを、numpy に変換 25raw_image = input_data[0].to('cpu').detach().numpy().copy() 26raw_image = raw_image.transpose((1, 2, 0)) 27raw_image = ((raw_image * 0.5) + 0.5) * 255.0 28raw_image = raw_image.astype(np.uint8) 29 30# 各画像 出力 31output = out_gradcam( 32 gcam=regions[0, 0], 33 raw_image=raw_image 34) 35 36## GradCAM 37plt.imshow(output, cmap="jet") 38plt.colorbar()

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。