5

टेंसरफ्लो के साथ कुछ प्रयोग चलाना, कुछ कार्यों के कार्यान्वयन को देखना चाहते हैं कि कुछ चीजें कैसे की जाती हैं, tf.train.GradientDescentOptimizer के साधारण मामले से शुरू हुई। GitHub से पूर्ण स्रोत कोड की ज़िप डाउनलोड किया है, स्रोत पेड़ पर कुछ खोजें भाग गया, मिल गया:ढाल वंश के लिए कोड कहां है?

C:\tensorflow-master\tensorflow\python\training\gradient_descent.py 

class GradientDescentOptimizer(optimizer.Optimizer): 

    def _apply_dense(self, grad, var): 
    return training_ops.apply_gradient_descent(

ठीक है, तो शायद वास्तविक कोड apply_gradient_descent में है, के लिए है कि ... वहाँ नहीं खोजा गया। पूरे स्रोत पेड़ में केवल तीन घटनाएं, जिनमें से सभी उपयोग की जाती हैं, परिभाषाएं नहीं।

training_ops के बारे में क्या? एक सुझाव फ़ाइल के साथ एक स्रोत फ़ाइल मौजूद है:

C:\tensorflow-master\tensorflow\python\training\training_ops.py 

from tensorflow.python.training import gen_training_ops 
# go/tf-wildcard-import 
# pylint: disable=wildcard-import 
from tensorflow.python.training.gen_training_ops import * 
# pylint: enable=wildcard-import 

... उपरोक्त उस फ़ाइल की पूरी सामग्री है। हम्म।

मैं इस फ़ाइल मिला:

C:\tensorflow-master\tensorflow\python\BUILD 

tf_gen_op_wrapper_private_py(
    name = "training_ops_gen", 
    out = "training/gen_training_ops.py", 
) 

जो पुष्टि करने के लिए इस तरह के और इस तरह के अन्य फ़ाइलों वस्तु कोड हैं लगता है, निर्माण प्रक्रिया में उत्पन्न - लेकिन जहां स्रोत कोड वे से उत्पन्न होते हैं रहा है?

तो यह वह बिंदु है जहां मैं हार मानता हूं और मदद मांगता हूं। क्या कोई भी टेंसरफ्लो कोड बेस से परिचित हो सकता है, जहां मुझे प्रासंगिक स्रोत कोड कहां है?

उत्तर

7

कार्यान्वयन मूल सी ++ कोड पर जाता है।

template <typename T> 
struct ApplyGradientDescent<GPUDevice, T> { 
    void operator()(const GPUDevice& d, typename TTypes<T>::Flat var, 
        typename TTypes<T>::ConstScalar lr, 
        typename TTypes<T>::ConstFlat grad) { 
    Eigen::array<typename TTypes<T>::Tensor::Index, 1> bcast; 
    bcast[0] = grad.dimension(0); 
    Eigen::Sizes<1> single; 
    var.device(d) -= lr.reshape(single).broadcast(bcast) * grad; 
    } 
}; 

सीपीयू कार्यान्वयन है here (core/kernels/training_ops.cc):

template <typename T> 
struct ApplyGradientDescent<CPUDevice, T> { 
    void operator()(const CPUDevice& d, typename TTypes<T>::Flat var, 
        typename TTypes<T>::ConstScalar lr, 
        typename TTypes<T>::ConstFlat grad) { 
    var.device(d) -= grad * lr(); 
    } 
}; 
यहाँ ApplyGradientDescent GPU कार्यान्वयन ( core/kernels/training_ops_gpu.cu.cc) है
संबंधित मुद्दे