TensorFlow के लिए स्विफ्ट (संग्रह मोड में)

टेन्सरफ्लो के लिए स्विफ्ट मशीन लर्निंग के लिए अगली पीढ़ी के प्लेटफॉर्म में एक प्रयोग था, जिसमें मशीन लर्निंग, कंपाइलर्स, डिफरेंशियल प्रोग्रामिंग, सिस्टम डिजाइन और उससे आगे के नवीनतम शोध को शामिल किया गया था। इसे फरवरी 2021 में संग्रहीत किया गया था। इस परियोजना की कुछ महत्वपूर्ण उपलब्धियों में शामिल हैं:

इस साइट को आगे अपडेट प्राप्त नहीं होंगे. एपीआई दस्तावेज़ीकरण और बाइनरी डाउनलोड के साथ-साथ ओपन डिज़ाइन रिव्यू मीटिंग रिकॉर्डिंग भी सुलभ रहेंगी।

तीव्र

स्विफ्ट एक ओपन सोर्स सामान्य प्रयोजन प्रोग्रामिंग भाषा है, जिसका उपयोगकर्ता आधार बड़ा और बढ़ता हुआ है। हमने स्विफ्ट को चुना क्योंकि इसमें एक खुली भाषा डिजाइन प्रक्रिया है और विशिष्ट तकनीकी कारणों का विवरण " टेन्सरफ्लो के लिए स्विफ्ट क्यों " दस्तावेज़ में दिया गया है। हम मानते हैं कि अधिकांश पाठक इससे अपरिचित हैं, इसलिए हम यहां इसके बारे में कुछ अतिरिक्त महत्वपूर्ण बातों पर संक्षेप में चर्चा करेंगे।

स्विफ्ट का विकास 2010 में शुरू हुआ, और इसका उद्देश्य अकादमिक नवीनता की कोशिश करने या धार्मिक रूप से प्रोग्रामिंग पद्धतियों का प्रचार करने के बजाय प्रोग्रामिंग भाषा डिजाइन में सर्वोत्तम प्रथाओं को एक प्रणाली में लाना था। परिणामस्वरूप, यह एक ही प्रणाली में बहु-प्रतिमान विकास (उदाहरण के लिए कार्यात्मक, ओओपी, सामान्य, प्रक्रियात्मक, आदि) का समर्थन करता है, और अकादमिक भाषाओं से कई प्रसिद्ध अवधारणाओं को लाता है (उदाहरण के लिए पैटर्न मिलान , बीजगणितीय डेटा प्रकार और प्रकार कक्षाएं) सबसे आगे. डेवलपर्स को स्विफ्ट में अपने सभी कोड को फिर से लिखने के लिए दृढ़ता से प्रोत्साहित करने के बजाय, यह व्यावहारिक रूप से अन्य भाषाओं के साथ इंटरऑपरेबिलिटी पर ध्यान केंद्रित करता है, उदाहरण के लिए, आपको सी हेडर फ़ाइलों को सीधे आयात करने और उन्हें एफएफआई के बिना उपयोग करने की अनुमति देता है और (अब) रैपर के बिना पायथन एपीआई का उपयोग करने की क्षमता देता है। .

स्विफ्ट के पास सीखने और उपयोग में आसान होने पर ध्यान देने के साथ निम्न-स्तरीय सिस्टम प्रोग्रामिंग से उच्च-स्तरीय स्क्रिप्टिंग तक विस्तार करने का साहसिक लक्ष्य है। क्योंकि स्विफ्ट को सीखना और उपयोग करना आसान होने के साथ-साथ शक्तिशाली भी होना चाहिए, यह जटिलता के प्रगतिशील प्रकटीकरण के सिद्धांत पर निर्भर करता है, जो उस जटिलता से लाभान्वित होने वाले लोगों पर आक्रामक रूप से जटिलता की लागत डालता है। उच्च प्रदर्शन के साथ संयुक्त "स्क्रिप्टिंग भाषा अनुभव" मशीन सीखने के लिए बहुत उपयोगी है।

स्विफ्ट के डिज़ाइन का एक अंतिम प्रासंगिक पहलू यह है कि स्विफ्ट भाषा का अधिकांश भाग वास्तव में इसकी मानक लाइब्रेरी में लागू किया गया है। इंट और बूल जैसे "बिल्टिन" प्रकार वास्तव में मानक लाइब्रेरी में परिभाषित केवल संरचनाएं हैं जो जादुई प्रकारों और संचालन को लपेटते हैं। वैसे, कभी-कभी हम मज़ाक करते हैं कि स्विफ्ट सिर्फ "एलएलवीएम के लिए सिंटैक्टिक शुगर" है।

स्विफ्ट के बारे में और भी बहुत कुछ अच्छा है और ढेर सारी सामग्री ऑनलाइन उपलब्ध है। यदि आप सामान्य स्विफ्ट प्रोग्रामिंग अवधारणाओं के बारे में अधिक जानने में रुचि रखते हैं, तो आरंभ करने के लिए यहां कुछ लिंक दिए गए हैं:

एक चेतावनी: स्विफ्ट अपने शुरुआती वर्षों में तेजी से विकसित हुई, इसलिए आपको स्विफ्ट 3 (2016 में रिलीज़) से पहले किसी भी चीज़ से सावधान रहना चाहिए।

TensorFlow के लिए स्विफ्ट क्यों?

TensorFlow के लिए स्विफ्ट मशीन लर्निंग मॉडल विकसित करने का एक नया तरीका है। यह आपको सीधे स्विफ्ट प्रोग्रामिंग भाषा में एकीकृत TensorFlow की शक्ति प्रदान करता है। हमारा मानना ​​है कि मशीन लर्निंग प्रतिमान इतने महत्वपूर्ण हैं कि वे प्रथम श्रेणी की भाषा और कंपाइलर समर्थन के पात्र हैं।

मशीन लर्निंग में एक मौलिक आदिम ग्रेडिएंट-आधारित अनुकूलन है: मापदंडों को अनुकूलित करने के लिए फ़ंक्शन डेरिवेटिव की गणना करना। TensorFlow के लिए स्विफ्ट के साथ, आप gradient(of:) जैसे विभेदक ऑपरेटरों का उपयोग करके फ़ंक्शन को आसानी से अलग कर सकते हैं, या gradient(in:) विधि को कॉल करके पूरे मॉडल के संबंध में अंतर कर सकते हैं। ये विभेदन एपीआई केवल Tensor -संबंधित अवधारणाओं के लिए उपलब्ध नहीं हैं - वे सभी प्रकारों के लिए सामान्यीकृत हैं जो Float , Double , सिमडी वैक्टर और आपकी अपनी डेटा संरचनाओं सहित Differentiable प्रोटोकॉल के अनुरूप हैं।

// Custom differentiable type.
struct Model: Differentiable {
    var w: Float
    var b: Float
    func applied(to input: Float) -> Float {
        return w * input + b
    }
}

// Differentiate using `gradient(at:_:in:)`.
let model = Model(w: 4, b: 3)
let input: Float = 2
let (𝛁model, 𝛁input) = gradient(at: model, input) { model, input in
    model.applied(to: input)
}

print(𝛁model) // Model.TangentVector(w: 2.0, b: 1.0)
print(𝛁input) // 4.0

डेरिवेटिव से परे, स्विफ्ट फॉर टेन्सरफ्लो प्रोजेक्ट उपयोगकर्ताओं को अधिक उत्पादक बनाने के लिए एक परिष्कृत टूलचेन के साथ आता है। आप ज्यूपिटर नोटबुक में स्विफ्ट को इंटरैक्टिव रूप से चला सकते हैं, और आधुनिक गहन शिक्षण लाइब्रेरी की विशाल एपीआई सतह का पता लगाने में मदद के लिए उपयोगी स्वत: पूर्ण सुझाव प्राप्त कर सकते हैं। आप सीधे अपने ब्राउज़र में कुछ ही सेकंड में आरंभ कर सकते हैं!

स्विफ्ट के शक्तिशाली पायथन एकीकरण की बदौलत TensorFlow के लिए स्विफ्ट में माइग्रेट करना वास्तव में आसान है। आप अपने पायथन कोड को धीरे-धीरे माइग्रेट कर सकते हैं (या अपने पसंदीदा पायथन लाइब्रेरी का उपयोग जारी रख सकते हैं), क्योंकि आप आसानी से अपनी पसंदीदा पायथन लाइब्रेरी को एक परिचित सिंटैक्स के साथ कॉल कर सकते हैं:

import TensorFlow
import Python

let np = Python.import("numpy")

let array = np.arange(100).reshape(10, 10)  // Create a 10x10 numpy array.
let tensor = Tensor<Float>(numpy: array)  // Seamless integration!