Tensorflow:如何使用tensorflow.contrib.data模块在数据预处理管道中生成随机正交矩阵?

时间:2017-10-25 04:21:02

标签: python tensorflow

我想生成一个随机正交矩阵,在数据预处理状态下随机旋转我的3D点云数据。 (我发现了一个不实现的实现How to create random orthonormal matrix in python numpy

如我所知,我使用的是TensorFlow的新数据集API。

1.我尝试将Numpy代码直接转换为Tf代码,我遇到了TensorFlow不允许切片分配的问题(TF甚至不允许分配普通的张量)。

2.我正在尝试

def _rotate_point_cloud_ortho(self, single_data):
    rotation_matrix = tf.Variable(tf.constant(rvs(), shape=[3,3]), name='rotation_matrix', trainable=False)
    self.initializer = rotation_matrix.initialized_value()
    rotation_matrix.assign(rvs())
    return tf.matmul(single_data, rotation_matrix)

得到了

ValueError: Fetch argument <tf.Tensor 'cond/Merge:0' shape=(3, 3) dtype=float32> cannot be interpreted as a Tensor. (Tensor Tensor("cond/Merge:0", shape=(3, 3), dtype=float32) is not an element of this graph.)

3.我正在考虑使用占位符作为随机正交矩阵,但数据集API使用map,因此很难传递矩阵。

我无法意识到这个错误来自哪里。

除了将Numpy实现硬编码到生成9个tf变量的函数中,然后将这些变量堆叠成3 * 3矩阵外,我还能尝试什么呢?

我当前API的代码:     class PointCloudDataGenerator(object):

    def __init__(self, tfrecord_path, mode, batch_size,
                  buffer_size=9824):
        # create dataset
        self.initializer = None
        data = tf.contrib.data.TFRecordDataset(tfrecord_path)

        # distinguish between train/infer. when calling the parsing functions
        if mode == 'training':
            data = data.map(self._parse_function_train, num_threads=4, output_buffer_size=100*batch_size)

        elif mode == 'inference':
            data = data.map(self._parse_function_inference, num_threads=4, output_buffer_size=100*batch_size)
        else:
          raise ValueError("Invalid mode '%s'." % (mode))

        # number of samples in the dataset
        self.data_size = 9840 if mode == 'training' else 2468

        # shuffle the first `buffer_size` elements of the dataset
        if mode == 'training':
            data = data.shuffle(buffer_size=buffer_size)

        # create a new dataset with batches of images
        data = data.batch(batch_size)
        self.data = data

0 个答案:

没有答案