【问题标题】:Tensor Tensor("predictions/Softmax:0", shape=(?, 1000), dtype=float32) is not an element of this graphTensor Tensor("predictions/Softmax:0", shape=(?, 1000), dtype=float32) 不是该图的元素
【发布时间】:2019-04-22 19:34:20
【问题描述】:

我正在尝试关注simple tutorial,了解如何使用预训练的 VGG 模型进行图像分类。我拥有的代码:

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)

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

在搜索了这个错误之后,我得到了这个代码:

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)

但这仍然会导致相同的错误。有人可以帮我吗?我不明白我做错了什么,因为该教程似乎对每个人都有效。

模型总结:

 _________________________________________________________________
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

【问题讨论】:

  • 您使用的是哪个版本的 tf/keras?你的代码对我来说很好。
  • @OrDinari Keras 2.2.4 和 Tensorflow 1.12
  • 我用的是keras 2.2.4和TF 1.8,升级有问题吗?
  • @OrDinari 我现在正在使用 TF 1.8.0 和 keras 2.2.4,测试了这两个代码,但在 softmax 上仍然出现错误 :( 你还有其他建议吗?我正在使用 docker张量流:1.8.0 图像
  • 它在哪里崩溃?在预测期间?或者尝试实例化模型时?

标签: python tensorflow keras


【解决方案1】:

似乎 Keras 不是线程安全的,因此您需要在每个线程中初始化模型。修复正在调用:_make_predict_function()

它确实对我有用。这是一个干净的例子:

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

希望这会有所帮助。

【讨论】:

  • 非常感谢。这真的很有帮助。
  • 不客气。这个问题可能很麻烦。祝你好运!
【解决方案2】:

由于您的代码很好,在干净的环境中运行应该可以解决它。

  • 清除~/.keras/的keras缓存

  • 使用正确的包在新环境中运行(可以使用 anaconda 轻松完成)

  • 确保您正在进行新会话,keras.backend.clear_session() 应删除所有现有的 tf 图。

【讨论】:

    猜你喜欢
    • 2020-06-09
    • 2018-04-27
    • 1970-01-01
    • 2019-09-17
    • 2019-10-23
    • 1970-01-01
    • 2019-09-24
    • 2019-07-18
    • 2018-04-25
    相关资源
    最近更新 更多