我正在开发一个TensorFlow项目,其目标是'定义为:
targets = tf.sparse_placeholder(tf.int32, name='targets')
现在使用saver.save(sess, model_path, meta_graph_suffix='meta', write_meta_graph=True)
保存我的模型会出现以下错误:
WARNING:tensorflow:Error encountered when serializing targets.
Type is unsupported, or the types of the items don't match field type in CollectionDef.
'SparseTensor' object has no attribute 'name'
我认为警告打印在以下代码行中:https://github.com/tensorflow/tensorflow/blob/f974e8d0c2420c6f7e2a2791febb4781a266823f/tensorflow/python/training/saver.py#L1452
使用saver.restore(session, save_path)
重新加载模型似乎可行。
以前有人见过这个问题吗?为什么序列化SparseTensor会发出警告?有没有办法避免这种警告?
我正在使用TensorFlow版本0.10.0rc0 python 2.7 GPU版本。我不能提供一个最小的例子,它不会一直发生,只在某些配置中。我无法分享我目前遇到此问题的模型。
答案 0 :(得分:3)
组件占位符(对于indices
,values
,可能还有shape
)以某种方式添加到某些集合中。如果您浏览saver.py
中的代码,则可以看到ops.get_all_collection_keys()
正在使用。
这应该是良性警告。我将转发给团队,看看是否可以采取措施来改善这种处理方式。
答案 1 :(得分:2)
警告意味着已将一个SparseTensor类型的操作添加到其to_proto()实现需要“name”字段的集合中。
如果您打算从meta_graph中恢复完整的图形,包括所有Python对象,我会认为这是一个错误,您应该找出将SparseTensor添加到集合中的操作。
如果您从未打算从meta_graph恢复,则可以忽略此错误。
希望有所帮助。
雪利酒