在以下功能中,作者的目的是基于vgg模型对下载的图像进行预测。
with tf.Graph().as_default():
url = ("https://upload.wikimedia.org/wikipedia/commons/d/d9/First_Student_IC_school_bus_202076.jpg")
image_string = urllib2.urlopen(url).read()
image = tf.image.decode_jpeg(image_string, channels=3)
image_float = tf.to_float(image, name='ToFloat')
# Subtract the mean pixel value from each pixel
processed_image = _mean_image_subtraction(image_float,
[_R_MEAN, _G_MEAN, _B_MEAN])
input_image = tf.expand_dims(processed_image, 0)
with slim.arg_scope(vgg.vgg_arg_scope()):
logits, _ = vgg.vgg_16(input_image,
num_classes=1000,
is_training=False,
spatial_squeeze=False)
pred = tf.argmax(logits, dimension=3)
init_fn = slim.assign_from_checkpoint_fn(
os.path.join(checkpoints_dir, 'vgg_16.ckpt'),
slim.get_model_variables('vgg_16'))
with tf.Session() as sess:
init_fn(sess)
segmentation, np_image, np_logits = sess.run([pred, image, logits])
我一直试图预测通过opencv读取的现有图像,我做的唯一修改是通过cv2读取图像,添加input_placeholder,并相应地修改sess.run。但是,我收到以下错误消息:
segmentation, np_image, np_logits = sess.run([pred,logits],feed_dict={input_placeholder:image})
ValueError: need more than 2 values to unpack
您是否想让我知道我所做的修改是错误的?
with tf.Graph().as_default():
image = cv2.imread('/data/cat.jpg',cv2.IMREAD_UNCHANGED)
input_placeholder = tf.placeholder(tf.float32,shape = [image.shape[0],image.shape[1],image.shape[2]])
image_float = np.float32(image)
# Subtract the mean pixel value from each pixel
processed_image = _mean_image_subtraction(image_float,[_R_MEAN, _G_MEAN, _B_MEAN])
input_image = tf.expand_dims(processed_image, 0)
with slim.arg_scope(vgg.vgg_arg_scope()):
logits, _ = vgg.vgg_16(input_image,
num_classes=1000,
is_training=False,
spatial_squeeze=False)
pred = tf.argmax(logits, dimension=3)
init_fn = slim.assign_from_checkpoint_fn(
os.path.join(checkpoints_dir, 'vgg_16.ckpt'),
slim.get_model_variables('vgg_16'))
with tf.Session() as sess:
init_fn(sess)
segmentation, np_image, np_logits = sess.run([pred,logits],feed_dict={input_placeholder:image})
答案 0 :(得分:1)
作为参考,请先查看官方文档:https://www.tensorflow.org/api_docs/python/tf/Session#run
对于传递给fetches
sess.run()
参数的每个图元素,您将返回一个值。在您的情况下,您将以下列表作为提取传递:[pred,logits]
因此sess.run([pred,logits], ...)
将返回2个值:运行pred
操作和logits
操作的结果。
引用文档
run()返回的值与提取的形状相同 参数,其中叶子被相应的值替换 由TensorFlow返回。
但是在这一行
segmentation, np_image, np_logits = sess.run([pred,logits],feed_dict={input_placeholder:image})
您正尝试将这两个值分配给3个不同的python变量(segmentation
,np_image
,np_logits
),因此您获得了ValueError
。
如果你看一下你提供的原始例子,最后一行是:
segmentation, np_image, np_logits = sess.run([pred, image, logits])
要模仿原始示例,请尝试从代码中删除np_image
声明,如下所示:
segmentation, np_logits = sess.run([pred,logits],feed_dict={input_placeholder:image})
答案 1 :(得分:0)
是一个python错误:
segmentation, np_image, np_logits = sess.run([pred,logits],feed_dict={input_placeholder:image})
应该是
np_image, np_logits = sess.run([pred,logits],feed_dict={input_placeholder:image})
你只是将两次抓取传递给了跑步功能