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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

453閲覧

kerasで画像予想モデルを作り、Djangoでアプリケーション化した際に、何故か2度目にエラーが出る。

hikaa

総合スコア19

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/12/16 03:04

編集2018/12/18 10:38

タイトル通りです。ランサーバーした後、一度目は上手く予想が表示されるのですがブラウザでリロードをすると以下のように表示されてしまいます。なぜでしょうか。お力を貸してください。よろしくお願いします。

error

1TypeError at /animal 2Cannot interpret feed_dict key as Tensor: Tensor Tensor("Placeholder:0", shape=(3, 3, 3, 32), dtype=float32) is not an element of this graph. 3Request Method: POST 4Request URL: http://127.0.0.1:8000/animal 5Django Version: 2.1.2 6Exception Type: TypeError 7Exception Value: 8Cannot interpret feed_dict key as Tensor: Tensor Tensor("Placeholder:0", shape=(3, 3, 3, 32), dtype=float32) is not an element of this graph. 9Exception Location: C:\Users\光\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\client\session.py in _run, line 1078 10Python Executable: C:\anaconda\python.exe 11Python Version: 3.6.4 12Python Path: 13['C:\project\revangeblog1216', 14 'C:\anaconda\python36.zip', 15 'C:\anaconda\DLLs', 16 'C:\anaconda\lib', 17 'C:\anaconda', 18 'C:\Users\光\AppData\Roaming\Python\Python36\site-packages', 19 'C:\anaconda\lib\site-packages', 20 'C:\anaconda\lib\site-packages\win32', 21 'C:\anaconda\lib\site-packages\win32\lib', 22 'C:\anaconda\lib\site-packages\Pythonwin'] 23Server time: Sun, 16 Dec 2018 02:56:28 +0000

以下画像予想ファイルです。

lib

1import pickle 2import numpy as np 3from PIL import Image 4from sklearn import datasets, svm 5from sklearn.model_selection import train_test_split 6import keras,sys 7from keras.models import Sequential,load_model 8from keras.layers import Conv2D,MaxPool2D 9from keras.layers import Activation ,Dropout ,Flatten, Dense 10from keras.utils import np_utils 11from PIL import Image #画像処理のセット 12import tensorflow as tf 13 14 15def build_model(): 16 17 model = Sequential() # (系列) モデルをシーケンシャルで作成 シーケンシャルモデルは層を積み重ねたもの。 18 19 # 一層目を作成 20 21 model.add(Conv2D(32, (3, 3), padding='same', input_shape=(50,50,3))) # xtrainの(450,50,50,3)の1以降を取り出す。今まではinput_shape=x.shape[1:]だったが、手動で入力する。 22 # #・3 x 3 のサイズの32個のフィルタによる畳み込みを行う➡フィルタは様々な処理でデータを抽出しやすくするものだと思う。https://imagingsolution.net/imaging/filter-algorithm/・入力画像と出力画像サイズが同じになるように(上下左右に)ゼロパディングを行う・X_trainの行列は {画像の個数 x R x G x Bの濃さ} というデータが入っているが、R,G,Bの部分の形状を入力データの形状とする 23 # X_train ➡(450,50,50,3)➡(50,50,3)が取り出せる。のデータが入っており、個数以下のデータの取り出しが必要なので、input_shape=X_train[1:] ※2より後ろ とする。 24 25 model.add(Activation('relu')) # 活性化関数 26 27 # 二層目 28 29 model.add(Conv2D(32, (3, 3))) 30 model.add(Activation('relu')) 31 model.add(MaxPool2D(pool_size=(2, 2))) # MAXプーリング。画像を圧縮することで、計算コストを下げるなどの効果がある。プールサイズを[2x2]のエリアで一番大きい値を取り出す(特徴抽出) 32 model.add(Dropout(0.25)) # ドロップアウト関数 ランダムでデータを切り捨て過学習を避ける。 33 34 model.add(Conv2D(64, (3, 3), padding='same')) # 64個のカーネル(フィルタ)で、畳み込み結果が同じサイズになるようにピクセル左右すに足す指定 35 model.add(Activation('relu')) 36 model.add(Conv2D(64, (3, 3))) 37 model.add(Activation('relu')) 38 model.add(MaxPool2D(pool_size=(2, 2))) # MAXプーリング。画像を圧縮することで、計算コストを下げるなどの効果がある。プールサイズを[2x2]のエリアで一番大きい値を取り出す(特徴抽出) 39 model.add(Dropout(0.25)) # ドロップアウト関数 ランダムでデータを切り捨て過学習を避ける。 40 41 model.add(Flatten()) 42 model.add(Dense(512)) # 全層結合 もとは3だったが・・・よくわからん。 43 model.add(Activation('relu')) 44 model.add(Dropout(0.5)) # ドロップアウト関数 ランダムでデータを切り捨て過学習を避ける。 45 46 model.add(Dense(5)) # 答えが5つに分かれるので、5だそうだ。 47 model.add(Activation('softmax')) 48 49 # 最適化 ・・損失関数を一番少なくするための計算 50 51 opt = keras.optimizers.rmsprop(lr=0.0001, 52 decay=1e-6) # optimaizer・・トレーニング時の更新アルゴリズム lr・・ラーニングレート 学習率 毎計算の幅  decay・・学習率を下げる。1e-6 10の何乗か 53 54 model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy']) 55 # optimaizer 最適化アルゴリズム categorical_crossentropyは交差エントロピー誤差というアルゴリズムを指定しています。 loss 損失関数 metrics・・評価手法 56 57 #model.fit(x, y, batch_size=32, epochs=100) #トレーニングの実行 今回は必要ない# batch_sizeランダムで取り出す画像数 epoch 実験回数 数を増やすと精度が上がる。マシンが遅い場合は下げてもいい。 58 59 model = load_model('animal_cnn_aug2.h5') #モデルのロード kerasに含まれている 60 61 return model 62

views

1from django.shortcuts import render 2from django.views.generic import ListView,DetailView,CreateView 3from django.views.generic import UpdateView 4from django.views.generic import DeleteView 5from django.urls import reverse_lazy 6from .forms import BlogForm,ImageUploadForm 7from .models import Blog 8from django.contrib import messages 9import calendar 10from collections import deque 11import datetime 12from django.views import generic 13from django.http import HttpResponseRedirect 14import numpy as np 15from PIL import Image 16from io import BytesIO 17import base64 18from .lib import predict,build_model 19 20class AnimalView(generic.FormView): 21 template_name = 'blog/blog_animal.html' 22 form_class = ImageUploadForm 23 24 25 def form_valid(self, form): 26 classes = ["monkey", "boar", "crow", "men", "women"] 27 num_classes = len(classes) # 格納された画像の数を数える。 28 image_size = 50 # 画像サイズを小さくする。 29 30 file = form.cleaned_data['file'] 31 image = Image.open(file) # なんかうまくいかないので、ここに直接打ち込んだ 32 image = image.convert('RGB') 33 image = image.resize((image_size, image_size)) 34 data = np.asarray(image) # numpyの配列に変換 35 X = [] 36 X.append(data) 37 X = np.array(X) 38 model = build_model() 39 40 result = model.predict([X])[0] # 推定結果を得る 予想結果が配列になっている。 41 predicted = result.argmax() # 推定値の中で、最も推定値の大きいものを得る 42 percentage = int(result[predicted] * 100) 43 44 # 推論した結果を、テンプレートへ渡して表示 45 context = { 46 'result': classes[predicted], 47 'percentage':percentage 48 } 49 50 return render(self.request, 'blog/blog_animal_result.html', context) 51

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gh640

2018/12/17 06:29

「一度目は上手く予想が表示されるのですが二度目から」というのがどういう操作なのかもう少し具体的に説明されると回答がもらえやすくなると思います。ブラウザでリロードされたということでしょうか?ページを一度閉じて新たなタブで開かれたということですか?
gh640

2018/12/17 06:30

それと `ImageUploadForm` の定義も載せられた方が回答者が状況を理解しやすくなるかと思います。
guest

回答1

0

自己解決

以下のように編集し、うまく動作するようになりました。

view

1graph = tf.get_default_graph() ⇦追加 2 3class AnimalView(generic.FormView): 4 template_name = 'blog/blog_animal.html' 5 form_class = ImageUploadForm 6 7 8 def form_valid(self, form): 9 global graph ⇦追加 10 with graph.as_default(): ⇦追加 11 classes = ["monkey", "boar", "crow", "men", "women"] 12 num_classes = len(classes) # 格納された画像の数を数える。 13 image_size = 50 # 画像サイズを小さくする。 14 15 file = form.cleaned_data['file'] 16 image = Image.open(file) # なんかうまくいかないので、ここに直接打ち込んだ 17 image = image.convert('RGB') 18 image = image.resize((image_size, image_size)) 19 data = np.asarray(image) # numpyの配列に変換 20 X = [] 21 X.append(data) 22 X = np.array(X) 23 model = build_model() 24 result = model.predict([X])[0] # 推定結果を得る 予想結果が配列になっている。 25 predicted = result.argmax() # 推定値の中で、最も推定値の大きいものを得る 26 percentage = int(result[predicted] * 100) 27 28 # 推論した結果を、テンプレートへ渡して表示 29 context = { 30 'result': classes[predicted], 31 'percentage':percentage 32 } 33 34 return render(self.request, 'blog/blog_animal_result.html', context)

投稿2018/12/18 10:43

hikaa

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問