预训练的 Tensorflow 模型无效参数错误
Pretrained Tensorflow Model invalid argument error
我正在使用带有预训练 mobilenet_v2 模型的 tensorflow 做我的项目,可以在 https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md
上找到
我想获得隐藏层值,所以我实现了这个源代码,但我得到了一个无效参数错误
if __name__ == '__main__':
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)
X = tf.placeholder(tf.uint8, shape=[None, None, None, 3])
graph = tf.get_default_graph()
for i in graph.get_operations():
if "Relu" in i.name:
print(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) ]]
我打印出了占位符和数据的形状。
占位符是 uint8 类型 [?,?,?,3]
图像的形状为 [1,300,300,3]
不知道是什么问题
看起来和错误信息上的类型完全匹配。
请告诉我问题是什么。
当您加载预定义图形并将图形恢复到最新的检查点时,图形已经定义。但是当你这样做时
X = tf.placeholder(tf.uint8, shape=[None, None, None, 3])
您正在图表中创建一个额外的节点。并且该节点与您要评估的节点无关,来自 graph.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
的所有节点。但是仍然有一些节点可以这样计算。
我正在使用带有预训练 mobilenet_v2 模型的 tensorflow 做我的项目,可以在 https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md
上找到我想获得隐藏层值,所以我实现了这个源代码,但我得到了一个无效参数错误
if __name__ == '__main__':
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)
X = tf.placeholder(tf.uint8, shape=[None, None, None, 3])
graph = tf.get_default_graph()
for i in graph.get_operations():
if "Relu" in i.name:
print(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) ]]
我打印出了占位符和数据的形状。
占位符是 uint8 类型 [?,?,?,3] 图像的形状为 [1,300,300,3] 不知道是什么问题
看起来和错误信息上的类型完全匹配。
请告诉我问题是什么。
当您加载预定义图形并将图形恢复到最新的检查点时,图形已经定义。但是当你这样做时
X = tf.placeholder(tf.uint8, shape=[None, None, None, 3])
您正在图表中创建一个额外的节点。并且该节点与您要评估的节点无关,来自 graph.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
的所有节点。但是仍然有一些节点可以这样计算。