在s390x上使用Tensorflow进行图像识别(教程示例)

时间:2017-10-06 21:49:54

标签: python-2.7 tensorflow

我已经安装了Tensorflow软件包,并从IBM s390x架构的源代码中对其进行了编译。如教程中所述的图像识别classify_image.py示例将引发错误,如下所示:

运行命令:

python ./classify_image.py --model_dir=/data/shared/myprojects/tensorflow/models/models-master/tutorials/image/imagenet --image_file=/data/shared/myprojects/keras/images/claude_profile.jpg

错误讯息:

  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/common_shapes.py", line 659, in _call_cpp_shape_fn_impl
    raise ValueError(err.message)
ValueError: Cannot reshape a tensor with 1041082757314414592 elements to shape [16777216,524288] (8796093022208 elements) for 'pool_3/_reshape' (op: 'Reshape') with input shapes: [1,22546423,22546423,2048], [2] and with input tensors computed as partial shapes: input[1] = [16777216,524288].

版本:

python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.VERSION
'1.3.1'
>>> 

可能的错误原因是字节序不兼容,因为在CPU以大端模式工作时,训练模型可能以小端符号存储。是否有一种简单的方法来配置字节交换,从而改变输入数据的字节顺序?没有图像处理例程的其他Tensorflow示例执行OK。

2 个答案:

答案 0 :(得分:0)

1041082757314414592听起来更像是溢出/下溢而不是字节序问题。如果您不尝试加载示例但尝试从头开始运行,您是否也会看到问题?

答案 1 :(得分:0)

这似乎正在发生,因为初始模型是Little Endian机器上的预训练模型,在Big Endian(s390x)上加载时会出现问题。此外,任何图形(例如classify_image_graph_def.pb )都会以一种格式存储大小等值,当在另一种格式中读取时会产生意外结果。

据我所知,还没有工具可用于将任何已保存的模型转换为大端兼容。

所以现在,在big endian上,我们需要从头开始训练我们的节点。