使用TensorFlow实现迭代特征分解的最佳方法是什么? (像matlabs eigs)。
我知道Eigen有能力执行特征分解,但我不清楚如何从tensorflow python API访问它。如果tensorflow只是作为Eigen的API,那么仅仅使用scipy.sparse.linalg.eigs会有什么优势吗?
答案 0 :(得分:2)
tf.self_adjoint_eig和tf.batch_self_adjoint_eig就是我在API中看到的, https://www.tensorflow.org/versions/master/api_docs/python/math_ops.html
答案 1 :(得分:2)
TensorFlow目前不公开通用的特征分解运算符。有两个主要选择:
Add a new C++ operator调用Eigen的特征分解函数。由于这通常很有用,您可以考虑在pull request中将其贡献给项目。
使用tf.py_func()
op在图表中运行Python函数,并将此函数调用scipy.sparse.linalg.eigs()
。
C ++运算符的主要好处是它可以避免序列化开销(将数组复制到Python之间),并且可以移植到其他平台(例如Android,iOS),这些平台并不总是有Python解释器可用