Python 如何压缩类型为<;的稀疏张量;不可转换为张量>;

Python 如何压缩类型为<;的稀疏张量;不可转换为张量>;,python,tensorflow,Python,Tensorflow,当从tensorflow中的tf.sets.set\u交叉点的op中将一个常数张量与一个备用张量合并时,它失败了 import tensorflow as tf sess = tf.Session() a = tf.add(tf.range(10), tf.cast(tf.ones([10]), dtype=tf.int32)) b = tf.constant([0, 1, 1, 0, 0, 1, 1, 0, 0, 1]) # This set appears to be sorted, b

当从tensorflow中的
tf.sets.set\u交叉点的op中将一个常数张量与一个备用张量合并时,它失败了

import tensorflow as tf
sess = tf.Session()

a = tf.add(tf.range(10), tf.cast(tf.ones([10]), dtype=tf.int32))
b = tf.constant([0, 1, 1, 0, 0, 1, 1, 0, 0, 1])

# This set appears to be sorted, but that is not documented behavior.
s = tf.sets.set_intersection(a[None,:], b[None, :])
s = tf.concat([a, tf.convert_to_tensor(s)], axis=0)
fsort = tf.contrib.framework.sort(s.values)

with tf.Session() as sess:
    print(type(s))
    print(sess.run(s).values)
    print(sess.run(fsort))
错误如下:

TypeError回溯(最近一次调用)
/make_tensor_proto中的data00/tiger/jupyterhub_deploy/venv/lib/python3.6/site-packages/tensorflow/python/framework/tensor_util.py(值、数据类型、形状、验证形状)
526尝试:
-->527 str_值=[proto_值中x的compat.as_字节(x)]
528除类型错误外:
/data00/tiger/jupyterhub_deploy/venv/lib/python3.6/site-packages/tensorflow/python/framework/tensor_util.py in(.0)
526尝试:
-->527 str_值=[proto_值中x的compat.as_字节(x)]
528除类型错误外:
/数据00/tiger/jupyterhub_deploy/venv/lib/python3.6/site-packages/tensorflow/python/util/compat.py,格式为字节(字节或文本,编码)
60 raise TypeError('应为二进制或unicode字符串,获得%r'%
--->61(字节或文本)
62
TypeError:应为二进制或unicode字符串,已获取
在处理上述异常期间,发生了另一个异常:
TypeError回溯(最近一次调用上次)
在里面
7#此集合似乎已排序,但这不是记录的行为。
8 s=tf.sets.set_交叉点(a[None,:],b[None,:])
---->9 s=tf.concat([a,tf.concat将_转换为_张量],轴=0)
10 fsort=tf.contrib.framework.sort(s.values)
11
/转换为tensor(值、数据类型、名称、首选数据类型)中的data00/tiger/jupyterhub_deploy/venv/lib/python3.6/site-packages/tensorflow/python/framework/ops.py
1048 name=名称,
1049首选类型=首选类型,
->1050 as_ref=False)
1051
1052
/数据00/tiger/jupyterhub_deploy/venv/lib/python3.6/site-packages/tensorflow/python/framework/ops.py在内部_convert_to_tensor中(值、数据类型、名称、as_ref、首选数据类型、ctx)
1144
1145如果ret为无:
->1146 ret=conversion\u func(值,dtype=dtype,name=name,as\u ref=as\u ref)
1147
1148如果未实施ret:
/data00/tiger/jupyterhub_deploy/venv/lib/python3.6/site-packages/tensorflow/python/framework/constant_op.py in_constant_tensor_conversion_函数(v,dtype,name,as_ref)
227 as_ref=False):
228=作为参考
-->229返回常量(v,dtype=dtype,name=name)
230
231
/data00/tiger/jupyterhub_deploy/venv/lib/python3.6/site-packages/tensorflow/python/framework/constant_op.py(值、数据类型、形状、名称、验证形状)
206 tensor_value.tensor.CopyFrom(
207张量使用。生成张量原型(
-->208值,dtype=dtype,shape=shape,verify_shape=verify_shape))
209 dtype\u value=attr\u value\u pb2.AttrValue(type=tensor\u value.tensor.dtype)
210常数张量=g.create\u op(
/make_tensor_proto中的data00/tiger/jupyterhub_deploy/venv/lib/python3.6/site-packages/tensorflow/python/framework/tensor_util.py(值、数据类型、形状、验证形状)
529 raise TypeError(“未能将%s类型的对象转换为张量。”
530“内容:%s考虑铸造元素为”
-->531“支持的类型”。%(类型(值),值))
532张量原始字符串值扩展(str值)
533返回张量
TypeError:未能将类型的对象转换为张量。内容:SparsetSensor(索引=张量(“DenseToDenseSetOperation_17:0”,shape=(?,2),dtype=int64),values=张量(“DenseToDenseSetOperation_17:1”,shape=(?,),dtype=int32),稠密_shape=张量(“DenseToDenseSetOperation_17:2”,shape=(2,),dtype=int64))将铸造元素考虑为支持类型。

而不是使用
tf。将\u转换为\u张量。
使用
tf.sparse.to \u dense(s)
。此外,我还将整个代码重写为:

tf.reset_default_graph()
a = tf.add(tf.range(10), tf.cast(tf.ones([10]), dtype=tf.int32))
b = tf.constant([0, 1, 1, 0, 0, 1, 1, 0, 0, 1])

# This set appears to be sorted, but that is not documented behavior.
s_sparse = tf.sets.set_intersection(a[None,:], b[None, :])
s_dense = tf.squeeze(tf.sparse.to_dense(s_sparse), axis=0)
s = tf.concat([a, s_dense], axis=0)
fsort = tf.contrib.framework.sort(s)

with tf.Session() as sess:
    print(type(s))
    print(sess.run(s))
    print(sess.run(fsort))

不要使用
tf.convert_to_tensor(s)
而使用
tf.sparse.to_dense(s)
。此外,我将整个代码重写为:

tf.reset_default_graph()
a = tf.add(tf.range(10), tf.cast(tf.ones([10]), dtype=tf.int32))
b = tf.constant([0, 1, 1, 0, 0, 1, 1, 0, 0, 1])

# This set appears to be sorted, but that is not documented behavior.
s_sparse = tf.sets.set_intersection(a[None,:], b[None, :])
s_dense = tf.squeeze(tf.sparse.to_dense(s_sparse), axis=0)
s = tf.concat([a, s_dense], axis=0)
fsort = tf.contrib.framework.sort(s)

with tf.Session() as sess:
    print(type(s))
    print(sess.run(s))
    print(sess.run(fsort))

请包括您的代码和完整回溯。请包括您的代码和完整回溯。