Tensorflow Slim:TypeError:预期为int32,获取的列表包含类型为'_Message'的Tensor [英] Tensorflow Slim: TypeError: Expected int32, got list containing Tensors of type '_Message' instead

查看:44
本文介绍了Tensorflow Slim:TypeError:预期为int32,获取的列表包含类型为'_Message'的Tensor的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用教程来学习TensorFlow Slim,但是在为Inception运行以下代码后:

I am following this tutorial for learning TensorFlow Slim but upon running the following code for 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]))

我似乎收到了这组错误:

I seem to be getting this set of errors:

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的新手,我们将不胜感激.

This is strange because all of this code is from their official guide. I am new to TF and any help would be appreciated.

推荐答案

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

I got the same problem when using the 1.0 released and I could make it work without having to roll back on a previous version.

问题是由api的更改引起的.讨论帮助我找到了解决方案: Google网上论坛> TensorFlow中最近的API更改

The problem is caused by change in the api. That discussion helped me to find the solution: Google group > Recent API Changes in TensorFlow

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

You just have to update all the line with 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模块似乎发生了一些变化.该代码创建的图形与检查点文件中存在的图形不同.

I was able to use the models without problem. But I still got error afterward when wanting to load the pretrained weight. Seems that the slim module got several changed since they made the checkpoint file. The graph created by the code and the one present in the checkpoint file were different.

注2:

通过添加到所有conv2d层biases_initializer=None

I was able to use the pretrain weights for inception_resnet_v2 by adding to all conv2d layer biases_initializer=None

这篇关于Tensorflow Slim:TypeError:预期为int32,获取的列表包含类型为'_Message'的Tensor的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆