これはタイルのビットが可能と整形である:
import tensorflow as tf
def sparse_tensor_merge(indices, values, shape):
"""Creates a SparseTensor from batched indices, values, and shapes.
Args:
indices: A [batch_size, N, D] integer Tensor.
values: A [batch_size, N] Tensor of any dtype.
shape: A [batch_size, D] Integer Tensor.
Returns:
A SparseTensor of dimension D + 1 with batch_size as its first dimension.
"""
merged_shape = tf.reduce_max(shape, axis=0)
batch_size, elements, shape_dim = tf.unstack(tf.shape(indices))
index_range_tiled = tf.tile(tf.range(batch_size)[..., None],
tf.stack([1, elements]))[..., None]
merged_indices = tf.reshape(
tf.concat([tf.cast(index_range_tiled, tf.int64), indices], axis=2),
[-1, 1 + tf.size(merged_shape)])
merged_values = tf.reshape(values, [-1])
return tf.SparseTensor(
merged_indices, merged_values,
tf.concat([[tf.cast(batch_size, tf.int64)], merged_shape], axis=0))
をしたがって、例えば:
batch_indices = tf.constant(
[[[0, 0], [0, 1]],
[[0, 0], [1, 1]]], dtype=tf.int64)
batch_values = tf.constant(
[[0.1, 0.2],
[0.3, 0.4]])
batch_shapes = tf.constant(
[[2, 2],
[3, 2]], dtype=tf.int64)
merged = sparse_tensor_merge(batch_indices, batch_values, batch_shapes)
with tf.Session():
print(merged.eval())
プリント:
SparseTensorValue(indices=array([[0, 0, 0],
[0, 0, 1],
[1, 0, 0],
[1, 1, 1]]),
values=array([ 0.1 , 0.2 , 0.30000001, 0.40000001],
dtype=float32),
dense_shape=array([2, 3, 2]))
注意組み合わせSparseTensorの形状こと元のバッチディメンションの後に、他のディメンションごとにバッチ全体の最大値が続きますイオン。
あなたは[sparse_merge](https://www.tensorflow.org/api_docs/python/sparse_ops/conversion#sparse_merge)を検討しましたか? –
デキューするテンソルは密なテンソルです。 'sparse_merge'は入力のスパーステンソルと思われます。 'sp_ids:int32またはint64型のvaluesプロパティを持つSparseTensor。 sp_values:任意の種類のASparseTensor。 – user7542570
私の愚かなことです。私は答えに何かをまとめました。 –