前提・実現したいこと
python 3.52を用いてkerasで作成したCNNモデルのヒートマップを作成したいと思っています。
現在作成したモデルを保存し、それを読み込み、読み込んだモデルでラベル予測したまで完成していますが、ヒートマップ作成の時に
エラーが発生して詰まっています。
今回のモデルではconv2d_8 という名前の畳み込み層を取り出したいと考えています。
img_tensorはヒートマップ作成のための入力データにしています。
参考にしたサイトは https://qiita.com/yakisobamilk/items/8f094590e5f45a24b59c です。
エラーメッセージは長いため、一部省略しています。
発生している問題・エラーメッセージ
FailedPreconditionError: Attempting to use uninitialized value conv2d_8/bias [[Node: conv2d_8/bias/read = Identity[T=DT_FLOAT, _class=["loc:@conv2d_8/bias"], _device="/job:localhost/replica:0/task:0/device:CPU:0"](conv2d_8/bias)]] FailedPreconditionError (see above for traceback): Attempting to use uninitialized value conv2d_8/bias [[Node: conv2d_8/bias/read = Identity[T=DT_FLOAT, _class=["loc:@conv2d_8/bias"], _device="/job:localhost/replica:0/task:0/device:CPU:0"](conv2d_8/bias)]]
該当のソースコード
python
1#保存したモデル 2model = Sequential() 3keras.initializers.Initializer() 4model.add(Conv2D(28,input_shape=image_shape,kernel_size=5,padding="same",activation='relu')) 5model.add(MaxPooling2D(pool_size=(2, 2))) 6model.add(Conv2D(56, kernel_size=5, padding="same", activation='relu')) 7model.add(MaxPooling2D(pool_size=(2, 2))) 8model.add(Flatten()) 9model.add(Dense(128, activation='relu')) 10model.add(Dense(output_size, activation='softmax')) 11 12open('and.json',"w").write(model.to_json()) 13model.save_weights('and.h5') 14======================================= 15#ヒートマップ作成する方のコードの一部 16 17# モデルの読み込み 18model = model_from_json(open('and.json', 'r').read()) 19model.load_weights('and.h5') 20 21# モデルの最終出力を取り出す 22model_output = model.output[:, 0] 23# 最後の畳込み層を取り出す 24last_conv = model.get_layer('conv2d_8') 25from tensorflow.python.keras import backend as K 26grads = K.gradients(model_output, last_conv.output)[0] 27pooled_grads = K.mean(grads, axis=(0, 1, 2)) 28iterate = K.function([model.input], 29 [pooled_grads, last_conv.output[0]]) 30pooled_grads_val, conv_output_val = iterate([img_tensor]) #ここでエラーが発生
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
python 3.52
keras 2.1.5
あなたの回答
tips
プレビュー