Tensorflow Slim:TypeError:预期为 int32,得到包含类型为“_Message"的张量的列表 [英] Tensorflow Slim: TypeError: Expected int32, got list containing Tensors of type '_Message' instead

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

问题描述

我正在关注 this 学习 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 group>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 层,我能够使用 inception_resnet_v2 的预训练权重 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"的张量的列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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