タイトル通りです。ランサーバーした後、一度目は上手く予想が表示されるのですがブラウザでリロードをすると以下のように表示されてしまいます。なぜでしょうか。お力を貸してください。よろしくお願いします。
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
回答1件
あなたの回答
tips
プレビュー