我已经安装了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。
答案 0 :(得分:0)
1041082757314414592听起来更像是溢出/下溢而不是字节序问题。如果您不尝试加载示例但尝试从头开始运行,您是否也会看到问题?
答案 1 :(得分:0)
这似乎正在发生,因为初始模型是Little Endian机器上的预训练模型,在Big Endian(s390x)上加载时会出现问题。此外,任何图形(例如classify_image_graph_def.pb )都会以一种格式存储大小等值,当在另一种格式中读取时会产生意外结果。
据我所知,还没有工具可用于将任何已保存的模型转换为大端兼容。
所以现在,在big endian上,我们需要从头开始训练我们的节点。