我正在为Keras中的自定义优化程序设计SVD(具体来说,我想将the Shampoo optimizer移植到Keras。
在Tensorflow中,我将使用tensorflow.python.ops.linalg_ops.svd()
,但是在keras.backend
中没有类似的功能。
可以在纯Keras设置中执行SVD,还是可以某种方式直接使用Tensorflow函数(如果可以,如何使用)?
编辑:仅供将来参考,实际上存在一个包装器功能,可以在Keras中直接使用本机tf优化器:
import keras as ks
from tensorflow.contrib.opt import AdamWOptimizer
tfopt = AdamWOptimizer()
ksopt = ks.optimizers.TFOptimizer(tfopt)
但是,不幸的是,它似乎不适用于Shampoo优化器。
答案 0 :(得分:1)
如果您将keras与tensorflow后端一起使用,则比keras后端是 tensorflow。
这意味着当您从keras后端调用方法时,它实际上会调用tensorflow方法。
因此,您可以同时使用和交替使用keras后端操作和tensorflow。
例如,在给定的代码中:
tensor = ...
m = K.mean(tensor)
...
我可以将行K.mean(tensor)
更改为tf.mean(tensor)
tensor = ...
m = tf.mean(tensor)
...
因此,您可以使用tensorflow SVD操作,就像它是keras后端的功能一样:)
例如,如果您想拥有
tensor = ...
res = K.some_submodule.svd(tensor)
...
比您只能做的
tensor = ...
res = tensorflow.python.ops.linalg_ops.svd(tensor)
...