简体   繁体   English

Tensor Tensor("predictions/Softmax:0", shape=(?, 1000), dtype=float32) 不是这个图的元素

[英]Tensor Tensor("predictions/Softmax:0", shape=(?, 1000), dtype=float32) is not an element of this graph

I am trying to follow a simple tutorial on how to use a pre-trained VGG model for image classification.我正在尝试遵循有关如何使用预训练 VGG 模型进行图像分类的简单教程 The code which I have:我拥有的代码:

from keras.applications.vgg16 import VGG16
from keras.preprocessing.image import load_img, img_to_array
from keras.applications.vgg16 import preprocess_input, decode_predictions

import numpy as np

class KerasModel(object):
    def __init__(self):
        self.model = VGG16()
    def evaluate(self):
        image = load_img('mug.jpg', target_size=(224,224))
        image = img_to_array(image)
        image = image.reshape((1, image.shape[0], image.shape[1], image.shape[2]))
        image = preprocess_input(image)
        yhat = self.model.predict(image)
        label = decode_predictions(yhat)
        label = label[0][0]
        return ('%s (%.2f%%)' % (label[1]), label[2]*100)

This gives the error: Tensor Tensor("predictions/Softmax:0", shape=(?, 1000), dtype=float32) is not an element of this graph.这给出了错误:Tensor Tensor("predictions/Softmax:0", shape=(?, 1000), dtype=float32) is not an element of this graph。

After some searching for this error I got to this code:在搜索了这个错误之后,我得到了这个代码:

from keras.applications.vgg16 import VGG16
from keras.preprocessing.image import load_img, img_to_array
from keras.applications.vgg16 import preprocess_input, decode_predictions

import numpy as np

import tensorflow as tf
graph = tf.get_default_graph()


class KerasModel(object):
    def __init__(self):
        self.model = VGG16()
    def evaluate(self):
        image = load_img('mug.jpg', target_size=(224,224))
        image = img_to_array(image)
        image = image.reshape((1, image.shape[0], image.shape[1], image.shape[2]))
        image = preprocess_input(image)
        with graph.as_default():
            yhat = self.model.predict(image)
        label = decode_predictions(yhat)
        label = label[0][0]
        return ('%s (%.2f%%)' % (label[1]), label[2]*100)

But this still results in the same error.但这仍然会导致相同的错误。 Could someone please help me out?有人可以帮我吗? I don't understand what I am doing wrong because the tutorial seems to work for everyone.我不明白我做错了什么,因为教程似乎对每个人都有效。

Model summary:型号概要:

 _________________________________________________________________
xvision | Layer (type)                 Output Shape              Param #   
xvision | =================================================================
xvision | input_1 (InputLayer)         (None, 224, 224, 3)       0         
xvision | _________________________________________________________________
xvision | block1_conv1 (Conv2D)        (None, 224, 224, 64)      1792      
xvision | _________________________________________________________________
xvision | block1_conv2 (Conv2D)        (None, 224, 224, 64)      36928     
xvision | _________________________________________________________________
xvision | block1_pool (MaxPooling2D)   (None, 112, 112, 64)      0         
xvision | _________________________________________________________________
xvision | block2_conv1 (Conv2D)        (None, 112, 112, 128)     73856     
xvision | _________________________________________________________________
xvision | block2_conv2 (Conv2D)        (None, 112, 112, 128)     147584    
xvision | _________________________________________________________________
xvision | block2_pool (MaxPooling2D)   (None, 56, 56, 128)       0         
xvision | _________________________________________________________________
xvision | block3_conv1 (Conv2D)        (None, 56, 56, 256)       295168    
xvision | _________________________________________________________________
xvision | block3_conv2 (Conv2D)        (None, 56, 56, 256)       590080    
xvision | _________________________________________________________________
xvision | block3_conv3 (Conv2D)        (None, 56, 56, 256)       590080    
xvision | _________________________________________________________________
xvision | block3_pool (MaxPooling2D)   (None, 28, 28, 256)       0         
xvision | _________________________________________________________________
xvision | block4_conv1 (Conv2D)        (None, 28, 28, 512)       1180160   
xvision | _________________________________________________________________
xvision | block4_conv2 (Conv2D)        (None, 28, 28, 512)       2359808   
xvision | _________________________________________________________________
xvision | block4_conv3 (Conv2D)        (None, 28, 28, 512)       2359808   
xvision | _________________________________________________________________
xvision | block4_pool (MaxPooling2D)   (None, 14, 14, 512)       0         
xvision | _________________________________________________________________
xvision | block5_conv1 (Conv2D)        (None, 14, 14, 512)       2359808   
xvision | _________________________________________________________________
xvision | block5_conv2 (Conv2D)        (None, 14, 14, 512)       2359808   
xvision | _________________________________________________________________
xvision | block5_conv3 (Conv2D)        (None, 14, 14, 512)       2359808   
xvision | _________________________________________________________________
xvision | block5_pool (MaxPooling2D)   (None, 7, 7, 512)         0         
xvision | _________________________________________________________________
xvision | flatten (Flatten)            (None, 25088)             0         
xvision | _________________________________________________________________
xvision | fc1 (Dense)                  (None, 4096)              102764544 
xvision | _________________________________________________________________
xvision | fc2 (Dense)                  (None, 4096)              16781312  
xvision | _________________________________________________________________
xvision | predictions (Dense)          (None, 1000)              4097000   
xvision | =================================================================
xvision | Total params: 138,357,544
xvision | Trainable params: 138,357,544
xvision | Non-trainable params: 0
xvision | _________________________________________________________________
xvision | None

Seems that Keras is not thread safe so you need to initialize the model in each thread.似乎 Keras 不是线程安全的,因此您需要在每个线程中初始化模型。 A fix is calling: _make_predict_function()修复调用:_make_predict_function()

It did work for me.它确实对我有用。 Here is a clean example:这是一个干净的例子:

from keras.models import load_model

def load_model():
  model = load_model('./my_model.h5')
  model._make_predict_function() 
  print('model loaded') # just to keep track in your server
return model

Hope this helps.希望这可以帮助。

As your code is fine, running with a clean environment should solve it.由于您的代码很好,在干净的环境中运行应该可以解决它。

  • Clear keras cache at ~/.keras/清除~/.keras/ keras 缓存

  • Run on a new environment, with the right packages (can be done easily with anaconda)使用正确的包在新环境中运行(使用 anaconda 可以轻松完成)

  • Make sure you are on a fresh session, keras.backend.clear_session() should remove all existing tf graphs.确保您处于新会话中, keras.backend.clear_session()应删除所有现有的 tf 图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 python - ValueError: Tensor Tensor("dense_2/Softmax:0", shape=(?, 43), dtype=float32) 不是这个图的一个元素 - python - ValueError: Tensor Tensor("dense_2/Softmax:0", shape=(?, 43), dtype=float32) is not an element of this graph / image / Tensor Tensor上的ValueError(“activation_5 / Softmax:0”,shape =(?,4),dtype = float32)不是此图的元素 - ValueError at /image/ Tensor Tensor(“activation_5/Softmax:0”, shape=(?, 4), dtype=float32) is not an element of this graph Tensor(“dense_2/Softmax:0”, shape=(?, 10), dtype=float32) 不是该图的元素 - Tensor(“dense_2/Softmax:0”, shape=(?, 10), dtype=float32) is not an element of this graph ValueError: Tensor Tensor("mrcnn_detection/Reshape_1:0", shape=(1, 100, 6), dtype=float32) 不是这个图的一个元素 - ValueError: Tensor Tensor("mrcnn_detection/Reshape_1:0", shape=(1, 100, 6), dtype=float32) is not an element of this graph 无法将 feed_dict 键解释为 Tensor:Tensor Tensor("Placeholder:0", shape=(135162, 6), dtype=float32) 不是此图的元素 - Cannot interpret feed_dict key as Tensor: Tensor Tensor("Placeholder:0", shape=(135162, 6), dtype=float32) is not an element of this graph TF 2.0:如何将 Tensor("mul_1:0", shape=(1000, 64), dtype=float32) 转换为 Numpy 数组 - TF 2.0: How to convert Tensor("mul_1:0", shape=(1000, 64), dtype=float32) to Numpy array ValueError:Tensor(“ BN_1 / moments / Squeeze:0”,shape =(32,256,32),dtype = float32)必须与Tensor来自同一图 - ValueError: Tensor(“BN_1/moments/Squeeze:0”, shape=(32, 256, 32), dtype=float32) must be from the same graph as Tensor ValueError: Tensor("ExponentialDecay_4:0", shape=(), dtype=float32) - ValueError: Tensor("ExponentialDecay_4:0", shape=(), dtype=float32) AssertionError:无法计算 output 张量(“softmax_layer/Identity:0”,shape=(None, 27, 8870),dtype=float32) - AssertionError: Could not compute output Tensor(“softmax_layer/Identity:0”, shape=(None, 27, 8870), dtype=float32) 图断开连接:无法在“input_1”层获取张量 Tensor("input_1:0", shape=(None, 299, 299, 3), dtype=float32) 的值 - Graph disconnected: cannot obtain value for tensor Tensor("input_1:0", shape=(None, 299, 299, 3), dtype=float32) at layer "input_1"
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM