我希望在 Keras 中为自定义优化器执行 SVD(具体来说,我想将 the Shampoo optimizer 移植到 Keras。
在 Tensorflow 中,我会使用 tensorflow.python.ops.linalg_ops.svd()
, 但是,keras.backend
中没有这样的函数。 .
SVD 能否在纯粹的 Keras 设置中执行,或者我能否以某种方式直接使用 Tensorflow 函数(如果可以,如何使用)?
编辑:仅供将来引用,实际上存在一个包装函数,允许在 Keras 中直接使用 native tf 优化器:
import keras as ks
from tensorflow.contrib.opt import AdamWOptimizer
tfopt = 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)
...
所以你可以像使用 tensorflow SVD 操作一样使用它,如果它是 keras 后端的函数:)
例如,如果你想拥有
tensor = ...
res = K.some_submodule.svd(tensor)
...
比你能做的还要多
tensor = ...
res = tensorflow.python.ops.linalg_ops.svd(tensor)
...
关于python - 我如何在 Keras 中使用 tensorflow.python.ops?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53581571/