{{1}}
聚苯乙烯。请不要使用纯python& numpy
因为我需要将此操作添加到我的TF模型图中,所以可能需要用纯TF方式完成操作?
答案 0 :(得分:1)
我假设你的起始张量的类型是SparseTensor。 (我认为不可能有一个具有'不规则形状'的密集张量。如果类型甚至不是张量,那么你不需要“纯粹的TF方式”)
使用以下内容:
dense = tf.sparse_tensor_to_dense(sparse_tensor_input, default_value=-1)
https://www.tensorflow.org/api_docs/python/tf/sparse_tensor_to_dense
如果希望密集张量的形状与输入稀疏张量不同,则可以在调用此函数之前更改后者的形状,或使用较低级别的函数https://www.tensorflow.org/api_docs/python/tf/sparse_to_dense。
答案 1 :(得分:0)
最近我遇到了同样的问题,并且我用了一点技巧解决了这个问题(即使这篇文章已经发表了将近一年,也许有人遇到了同样的问题)。
首先,TensorFlow无法将该数组转换为密集张量,因此我将数组连接为字符串列表,例如a = ['2','1,2,3','4,5']
然后使用纯TF代码分割此字符串,这是简单的代码:
def pad_length(sequence, limited_len):
seq_sparse = tf.string_split(sequence, ',')
seq_dense = tf.sparse_to_dense(
seq_sparse.indices, seq_sparse.dense_shape, tf.cast(tf.string_to_number(seq_sparse.values), tf.int32)
)
seq_slice = tf.strided_slice(seq_dense, [0, 0], [tf.shape(sequence)[0], limited_len])
pad_dense = tf.pad(seq_slice, paddings=[[0, 0], [0, limited_len - tf.shape(seq_slice)[1]]])
return pad_dense
a = ['2','1,2,3','4,5']
a = tf.convert_to_tensor(a)
b = pad_length(a, 3)
sess=tf.Ssssion()
sess.run(b)
"""
b => array([
[2, 0, 0],
[1, 2, 3],
[4, 5, 0]
], dtype=int32)
"""
干杯!