当前位置: 首页 > 面试题库 >

Tensorflow Slim:TypeError:预期为int32,获取的列表包含类型为'_Message'的Tensor

闽涵蓄
2023-03-14
问题内容

我正在按照本教程学习TensorFlow
Slim,但是在运行以下代码进行Inception时:

import numpy as np
import os
import tensorflow as tf
import urllib2

from datasets import imagenet
from nets import inception
from preprocessing import inception_preprocessing

slim = tf.contrib.slim

batch_size = 3
image_size = inception.inception_v1.default_image_size
checkpoints_dir = '/tmp/checkpoints/'
with tf.Graph().as_default():
    url = 'https://upload.wikimedia.org/wikipedia/commons/7/70/EnglishCockerSpaniel_simon.jpg'
    image_string = urllib2.urlopen(url).read()
    image = tf.image.decode_jpeg(image_string, channels=3)
    processed_image = inception_preprocessing.preprocess_image(image, image_size, image_size, is_training=False)
    processed_images  = tf.expand_dims(processed_image, 0)

    # Create the model, use the default arg scope to configure the batch norm parameters.
    with slim.arg_scope(inception.inception_v1_arg_scope()):
        logits, _ = inception.inception_v1(processed_images, num_classes=1001, is_training=False)
    probabilities = tf.nn.softmax(logits)

    init_fn = slim.assign_from_checkpoint_fn(
        os.path.join(checkpoints_dir, 'inception_v1.ckpt'),
        slim.get_model_variables('InceptionV1'))

    with tf.Session() as sess:
        init_fn(sess)
        np_image, probabilities = sess.run([image, probabilities])
        probabilities = probabilities[0, 0:]
        sorted_inds = [i[0] for i in sorted(enumerate(-probabilities), key=lambda x:x[1])]

    plt.figure()
    plt.imshow(np_image.astype(np.uint8))
    plt.axis('off')
    plt.show()

    names = imagenet.create_readable_names_for_imagenet_labels()
    for i in range(5):
        index = sorted_inds[i]
        print('Probability %0.2f%% => [%s]' % (probabilities[index], names[index]))

我似乎收到这组错误:

Traceback (most recent call last):
  File "DA_test_pred.py", line 24, in <module>
    logits, _ = inception.inception_v1(processed_images, num_classes=1001, is_training=False)
  File "/home/deepankar1994/Desktop/MTP/TensorFlowEx/TFSlim/models/slim/nets/inception_v1.py", line 290, in inception_v1
    net, end_points = inception_v1_base(inputs, scope=scope)
  File "/home/deepankar1994/Desktop/MTP/TensorFlowEx/TFSlim/models/slim/nets/inception_v1.py", line 96, in inception_v1_base
    net = tf.concat(3, [branch_0, branch_1, branch_2, branch_3])
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/array_ops.py", line 1053, in concat
    dtype=dtypes.int32).get_shape(
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 651, in convert_to_tensor
    as_ref=False)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 716, in internal_convert_to_tensor
    ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/constant_op.py", line 176, in _constant_tensor_conversion_function
    return constant(v, dtype=dtype, name=name)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/constant_op.py", line 165, in constant
    tensor_util.make_tensor_proto(value, dtype=dtype, shape=shape, verify_shape=verify_shape))
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_util.py", line 367, in make_tensor_proto
    _AssertCompatible(values, dtype)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_util.py", line 302, in _AssertCompatible
    (dtype.name, repr(mismatch), type(mismatch).__name__))
TypeError: Expected int32, got list containing Tensors of type '_Message' instead.

这很奇怪,因为所有这些代码均来自其官方指南。我是TF的新手,我们将不胜感激。


问题答案:

使用1.0发行版时,我遇到了同样的问题,我可以使其工作而不必回滚到先前版本。

问题是由api的更改引起的。这次讨论帮助我找到了解决方案:Google组>
TensorFlow中的最近API更改

您只需要使用tf.concat更新所有行

例如

net = tf.concat(3, [branch_0, branch_1, branch_2, branch_3])

应该更改为

net = tf.concat([branch_0, branch_1, branch_2, branch_3], 3)

注意:

我能够毫无问题地使用模型。但是后来我想加载预训练的重量时仍然出现错误。自从他们制作了检查点文件以来,slim模块似乎发生了一些变化。该代码创建的图形与检查点文件中存在的图形不同。

笔记2:

通过添加到所有conv2d层,我能够对inception_resnet_v2使用预训练权重 biases_initializer=None



 类似资料:
  • 问题内容: 我有一个这样的清单: 我想获取T的.class。我该怎么做? 我的意思是: 编辑: 我尝试过: 当我调试它时 genericType 值: java.util.List 所以我认为这肯定是与该问题不同的问题:获取java.util.List的泛型类型,因为如果您使用声明了一个类并在以后的其他方法中分配了某些内容,则该类消失了。 问题答案: 您不能因为类型擦除。泛型类型在运行时未知(已被

  • 问题内容: 我的字符串列表如下所示: 我的期望是,我想检查父列表是否包含 序列 子列表,然后基于子列表获取父列表中的开始索引和结束索引。 从上面的示例: 我尝试使用方法,但它不在乎列表项的顺序,因此无法从此方法获取开始和结束索引。 我正在寻找最快的方法,因为我的列表中有很多数据,而且我必须从许多输入字符串中进行搜索。 任何帮助,将不胜感激! 更新 : 我需要获取所有子列表的索引都包含在父列表中。例

  • 我有一个对象列表,其中的数据如下: XYZ 11-10-2012 ABC 11-10-2012 PQR 20-04-2012 IJK 24-08-2012 MnO 22-05-2014

  • 问题内容: 我正在尝试检索目录中的所有图像,包括所有子目录。我目前正在使用 这可行,但是结果是: 我希望它一次执行整个目录分支,因此结果是: 非常感谢您的帮助,欢呼! 附注:如果我只需将所有子目录都包含在投资组合下,而不必用通配符具体说明每个目录,那也很好。 问题答案: 从示例

  • 问题内容: 目前我有这样的桌子 如您所见,具有给定时间戳记的设备中会有一些值(列类型为datetime)。 问题在于该设备可以在任何时候启动和停止,并且数据中没有直接信息表明已发生启动或停止。但是从给定的时间戳列表中,很容易知道何时开始和停止发生,因为每两行的时间戳在五秒钟之内都属于同一度量。 现在,我想从此数据中获得像这样的列表: 那么有什么想法可以快速地做到这一点?我所能想到的就是使用某种游标

  • 因此,对于你们中的一些人来说,我的问题可能有点愚蠢,但是我正在查询一些必须作为响应返回的数据,然后我必须在我的应用程序的前端使用该数据的一部分来使用AngularJS和nvD3图表来绘制它。要正确设置绘图工具的数据格式,我必须将此数据转换为正确的 json 格式。我找不到直接的方法从返回的响应中提取我需要的数字。我只需要获取我需要的值,并将它们转换为列表,然后解析为json数组。以下是我为此所做的