gpt4 book ai didi

python - 在 Tensorflow 中查找方法的实现

转载 作者:太空宇宙 更新时间:2023-11-03 14:02:49 30 4
gpt4 key购买 nike

我想更改一些最小化优化器,例如 AdadeltaOptimizer ,用于 Tensorflow 中。我得到了许可证,但lib中没有代码,只有引用,那么我如何找到实现?这是 API 的 Adadelta 示例:

@tf_export("train.AdadeltaOptimizer") class 
AdadeltaOptimizer(optimizer.Optimizer)
Optimizer that implements the Adadelta algorithm.
See [M. D. Zeiler](http://arxiv.org/abs/1212.5701) ([pdf]
(http://arxiv.org/pdf/1212.5701v1.pdf))

最佳答案

第一个入口点是python/training/adadelta.py来自 tensorflow 主仓库。但您可能会注意到它是一个 python 包装器,所有操作实际上都是在 native C++ 中实现并在 python 中加载(这是 tensorflow 中的常见做法,例如参见这个问题: Where is the code for gradient descent? )。

例如,在core/kernels/training_ops.cc中你可以找到ApplyAdadelta操作的CPU实现。相同操作的 GPU 实现位于 core/kernels/training_ops_gpu.cu.cc :

template <typename T>
struct ApplyAdadelta<GPUDevice, T> {
void operator()(const GPUDevice& d, typename TTypes<T>::Flat var,
typename TTypes<T>::Flat accum,
typename TTypes<T>::Flat accum_update,
typename TTypes<T>::ConstScalar lr,
typename TTypes<T>::ConstScalar rho,
typename TTypes<T>::ConstScalar epsilon,
typename TTypes<T>::ConstFlat grad) {
Eigen::array<typename TTypes<T>::Tensor::Index, 1> bcast;
bcast[0] = grad.dimension(0);
Eigen::Sizes<1> single;

accum.device(d) = accum * rho.reshape(single).broadcast(bcast) +
grad.square() * (grad.constant(T(1)) -
rho.reshape(single).broadcast(bcast));
const auto update =
(accum_update + epsilon.reshape(single).broadcast(bcast)).sqrt() *
(accum + epsilon.reshape(single).broadcast(bcast)).rsqrt() * grad;
var.device(d) -= update * lr.reshape(single).broadcast(bcast);
accum_update.device(d) =
accum_update * rho.reshape(single).broadcast(bcast) +
update.square() *
(grad.constant(T(1)) - rho.reshape(single).broadcast(bcast));
}
};

如果您想修补 C++ 代码,则必须重建 .so 库。为了能够在 CPU 和 GPU 上运行新的优化器,您必须接触并重建两者。

关于python - 在 Tensorflow 中查找方法的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49134152/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com