Python 预训练Tensorflow模型无效参数错误

Python 预训练Tensorflow模型无效参数错误,python,tensorflow,machine-learning,inference,pre-trained-model,Python,Tensorflow,Machine Learning,Inference,Pre Trained Model,我正在使用tensorflow和预先培训的mobilenet_v2模型进行我的项目,该模型可以在 我想得到隐藏层的值,所以我实现了这个源代码,得到了一个invalidargumenterror 如果uuuu name_uuuu=='\uuuuuuu main\uuuuuu': im=Image.open('./sample/maltiz.png') im3=im.调整大小((300300)) image=np.asarray(im)[:,:,:3] 模型路径='models/ssd\u mobi

我正在使用tensorflow和预先培训的mobilenet_v2模型进行我的项目,该模型可以在

我想得到隐藏层的值,所以我实现了这个源代码,得到了一个invalidargumenterror

如果uuuu name_uuuu=='\uuuuuuu main\uuuuuu':
im=Image.open('./sample/maltiz.png')
im3=im.调整大小((300300))
image=np.asarray(im)[:,:,:3]
模型路径='models/ssd\u mobilenet\u v2\u coco\u 2018\u 03\u 29/'
meta\u path=os.path.join(model\u path'model.ckpt.meta')
模型=tf.train.import\u元图(元路径)
sess=tf.Session()
模型还原(sess、tf.train、最新检查点(模型路径))
data=np.array([image])
data=data.astype(np.uint8)
X=tf.placeholder(tf.uint8,shape=[None,None,None,3])
graph=tf.get\u default\u graph()
对于图中的i.get_操作():
如果i.名称中的“Relu”:
打印(sess.run(i.values(),feed_dict={X:data}))
我收到了这个错误信息

File "load_model.py", line 42, in <module>

    print(sess.run(i.values(), feed_dict = { X : data}))
InvalidArgumentError: You must feed a value for placeholder tensor 'image_tensor' with dtype uint8 and shape [?,?,?,3]

[[node image_tensor (defined at load_model.py:24) ]]
文件“load_model.py”,第42行,在
打印(sess.run(i.values(),feed_dict={X:data}))
InvalidArgumentError:必须为占位符张量“image_tensor”提供一个值,其中数据类型为uint8,形状为[?,?,?,3]
[[node image_tensor(定义于load_model.py:24)]]
我打印出了占位符和数据的形状

占位符为uint8类型[?,?,?,3] 图像的形状为[1300300,3] 我不知道是什么问题

它看起来与错误消息上的类型完全匹配


请告诉我问题出在哪里。

加载预定义的图形并将图形还原到最新的检查点时,图形已定义。但当你这么做的时候

X = tf.placeholder(tf.uint8, shape=[None, None, None, 3])
您正在图形中创建一个额外的节点。此节点与要计算的节点无关,即
图形中的节点。get_operations()
不依赖于此额外节点,而是依赖于其他节点,并且由于此其他节点未获得值,因此错误表示参数无效

正确的方法是从预定义的图中获取要计算的节点所依赖的张量

im = Image.open('./sample/maltiz.png')
im3 = im.resize((300, 300))

image = np.asarray(im)[:,:,:3]

model_path = 'models/ssd_mobilenet_v2_coco_2018_03_29/'

meta_path = os.path.join(model_path, 'model.ckpt.meta')
model = tf.train.import_meta_graph(meta_path)

sess = tf.Session()
model.restore(sess, tf.train.latest_checkpoint(model_path))

data = np.array([image])
data = data.astype(np.uint8)

graph = tf.get_default_graph()
X = graph.get_tensor_by_name('image_tensor:0')

for i in graph.get_operations():
    if "Relu" in i.name:
        print(sess.run(i.values(), feed_dict = { X : data}))

PS:我自己也尝试过上面的方法,但是tensorflow(版本1.13.1)的内部错误阻止我评估所有名称中包含
Relu
的节点。但是仍然有一些节点可以这样计算。

你能尝试使用
np.array(image)
而不是np.array([image])吗我刚刚得到了与前一个几乎相同的错误。(形状不匹配)值错误:无法为具有形状“(?,?,?,?,3)”的张量“占位符:0”输入形状(300,300,3)的值。您可以在
data=data.astype(np.uint8)
?uint8
print(data.dtype)
(1300,300,3)
print(data.Shape)
ThanksFYI,Tensor(“占位符:0”,形状=(?,?,?,3),数据类型=uint8)打印(X)