是否有可能强制Tensorflow生成正交矩阵?

时间:2018-03-22 13:38:49

标签: python tensorflow

我使用Tensorflow为一组输入向量(X)生成一个转换矩阵到目标向量(Y)。使用梯度下降算法最小化变换输入和目标矢量样本I之间的误差。后来我想使用生成的矩阵来转换来自与训练输入向量相同的源的向量,使它们看起来像对应的目标向量。几乎是线性回归,但具有三维目标。

我可以假设输入和目标向量在笛卡尔空间中。因此,变换矩阵应该包括旋转和平移。我只使用单位向量,所以我也可以安全地假设没有翻译,只有旋转。

因此,为了获得一个有效的旋转矩阵,我可以将其转换为旋转四元数,我理解我必须确保矩阵是正交的。

因此,问题是,是否有可能给Tensorflow一些约束,以便它试图收敛的矩阵保证是正交的?可以是参数,数学约束,特定优化器等等。我只需要确保算法收敛到有效的旋转矩阵。

2 个答案:

答案 0 :(得分:0)

应该可以。 我看到两种解决方案。

如果你不关心变换是一个完美的旋转,你可以把矩阵调整到你认为它是一个好的矩阵(使它成为一个完美的旋转),然后计算你喜欢的矩阵和原始并将其添加为损失。使用这种方法,您可以推动模型执行您想要的操作,但模型可能无法收敛到完美旋转,特别是如果完美旋转不是一个非常好的解决方案。

另一种方法是从适当的旋转矩阵开始并训练旋转的参数。在这种情况下,您将获得旋转轴的x,y,z和旋转量。因此,将这些声明为变量,计算旋转矩阵并在模型中使用它。操作是可导出的,因此梯度下降应该有效,但根据数据本身,您可能依赖于起始位置(因此请尝试几次)。

很难说哪种方法在您的情况下效果最好,因此可能值得尝试。

答案 1 :(得分:0)

一种可能性是使用quaternion构造旋转矩阵。您只能学习一个4元素向量,然后将其标准化并construct the rotation matrix。或者学习Euler angles并相应地组合旋转矩阵,但我认为四元数应该更适合优化。

您还可以探索其他orthogonal matrix parametrizations(限制访问的论文)。