質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.01%

tensorflowのエラーTypeError: Cannot interpret feed_dict key as Tensor: Tensor Tensor("conv2d_1_input:0",

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 617

meJ15

score 41

前提・実現したいこと

python のFlaskでサーバーを立てて、ウェブ上で機械学習により判別するシステムを作っています。

ユーザからのデータをwebでもらい、ウェブでの学習ボタンを押すとそのデータをpythonに投げ、pythonで学習させています。

しかし一度目の学習はうまくできるのですが、そのボタンを2回目以降押すとエラーがでます。
またその問題となっているモジュールを上書き保存して、更新すると一回目だけはうまく学習できます。

何がいけないのでしょうか?

発生している問題・エラーメッセージ

TypeError: Cannot interpret feed_dict key as Tensor: Tensor Tensor("conv2d_1_input:0", shape=(?, 6, 10, 1), dtype=float32) is not an element of this graph.

該当のソースコード

//サーバたてるコード
@app.route('/')
def index():
    with open("index5online.html", "rb") as f:
        return render_template('index5online.html')
    #オンライン学習用の推定

@app.route('/learning/',methods=['GET','POST'])
def learning():
    label = act5_keras.keras_learning()

    return ('----finish learning by %s--- '%(label) )
//act5_keras.py
def keras_learning():

    //一部処理

    # CNNモデル構造を定義 --- (*2)
    model = Sequential()
    model.add(Conv2D(32, kernel_size=(3, 3),
                     activation='relu',
                     input_shape=in_shape))
    model.add(Conv2D(64, (3, 3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))
    model.add(Flatten())
    model.add(Dense(128, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(out_size, activation='softmax'))

    # モデルを構築 --- (*3)
    model.compile(
        loss='categorical_crossentropy',
        optimizer=RMSprop(),
        metrics=['accuracy'])

    # 学習を実行 --- (*4)
    hist = model.fit(X_train, y_train,
              batch_size=128, 
              epochs=30,
              verbose=1,
              validation_data=(X_test, y_test))

    # モデルを評価 --- (*5)
    score = model.evaluate(X_test, y_test, verbose=1)
    print('正解率=', score[1], 'loss=', score[0])
    """
    # 学習の様子をグラフへ描画 --- (*6)
    # 正解率の推移をプロット
    plt.plot(hist.history['acc'])
    plt.plot(hist.history['val_acc'])
    plt.title('Accuracy')
    plt.legend(['train', 'test'], loc='upper left')
    plt.show()

    # ロスの推移をプロット
    plt.plot(hist.history['loss'])
    plt.plot(hist.history['val_loss'])
    plt.title('Loss')
    plt.legend(['train', 'test'], loc='upper left')
    plt.show()
    """
    model.save('CNN_model.h5')
    model.save_weights('CNN_weight.h5')

    return "keras"


def keras_predict(arr):
//予測の関数
    model = load_model('CNN_model.h5')
    model.load_weights('CNN_weight.h5')
///....

試したこと

一回目だけは有効なのが良く理解できません、
>参考をみましたが、
マルチスレッドで動作する場合に、読み込んだモデルが別のスレッドには共有されないため起きる。ということらしいのですが、
act5_keras.pyの予測の関数でモデルを読み込んでるのがいけないのでしょうか?
予測の関数は、ユーザが予測ボタンを押さないと動かないようになっていますが、、、

なにを変えれば良いのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.01%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる