我想在Keras中为自定义优化器实现SVD(特别是,我想将Shampoo优化器移植到Keras中)。
在TensorFlow中,我会使用tensorflow.python.ops.linalg_ops.svd()
,然而,keras.backend
中没有类似的函数。
SVD可以在纯粹的Keras环境中执行吗,或者我能否直接使用TensorFlow的函数(如果可以,如何使用)?
编辑:为了将来参考,实际上存在一个包装函数,允许在Keras中直接使用原生tf优化器:
import keras as ksfrom tensorflow.contrib.opt import AdamWOptimizertfopt = AdamWOptimizer()ksopt = ks.optimizers.TFOptimizer(tfopt)
遗憾的是,对于Shampoo优化器而言,这似乎并不适用。
回答:
如果你使用的是基于TensorFlow后端的Keras,那么Keras后端就是TensorFlow。
这意味着当你调用Keras后端的方法时,实际上是在调用TensorFlow的方法。
因此,你可以同时使用Keras后端操作和TensorFlow,并且可以互换使用。
例如,在给定的代码中:
tensor = ...m = K.mean(tensor)...
我可以将K.mean(tensor)
这一行改为tf.mean(tensor)
tensor = ...m = tf.mean(tensor)...
所以你可以像使用Keras后端的函数一样,直接使用TensorFlow的SVD操作:)
例如,如果你想这样做
tensor = ...res = K.some_submodule.svd(tensor)...
那么你可以直接这样做
tensor = ...res = tensorflow.python.ops.linalg_ops.svd(tensor)...