मैं एंड्रॉइड पर टेन्सफोर्लो मॉडल को प्रशिक्षण और तैनाती के लिए वर्कफ़्लो को समझने की कोशिश कर रहा हूं। मुझे स्टैक ओवरफ्लो पर इस तरह के अन्य प्रश्नों के बारे में पता है, लेकिन उनमें से कोई भी उन समस्याओं को हल करने के लिए प्रतीत नहीं होता है जिन्हें मैंने चलाया है।एंड्रॉइड पर एक टेंसफोर्लो मॉडल चलाना
- बिल्ड और अजगर में मॉडल Tensorflow प्रशिक्षित:
Tensorflow रिपोजिटरी से एंड्रॉयड उदाहरण अध्ययन करने के बाद यह मैं क्या सोचता कार्यप्रवाह होना चाहिए।
- नया ग्राफ बनाएं, और इस नए ग्राफ में सभी प्रासंगिक नोड्स (यानी प्रशिक्षण के लिए ज़िम्मेदार नोड्स) को स्थानांतरित करें। प्रशिक्षित वज़न चर को स्थिरांक के रूप में आयात किया जाता है ताकि सी ++ एपीआई उन्हें पढ़ सके।
- जावा में एंड्रॉइड जीयूआई का विकास, देशी कीवर्ड का उपयोग करके टेंसफोर्लो मॉडल को कॉल करने के लिए।
- टेन्सफोर्लो मूल कॉल के लिए सी/सी ++ स्टब कोड उत्पन्न करने के लिए जावा चलाएं।
- प्रशिक्षित/क्रमबद्ध मॉडल को पढ़ने और एक्सेस करने के लिए टेन्सफोर्लो सी ++ एपीआई का उपयोग करके स्टब भरें।
- दोनों जावा ऐप, देशी टेन्सफोर्लो इंटरफ़ेस (एक .so फ़ाइल के रूप में) बनाने के लिए बेसल का उपयोग करें, और एपीके उत्पन्न करें।
एपीके को तैनात करने के लिए एडीबी का उपयोग करें।
चरण 6 समस्या है। बेज़ेल खुशी से देशी (ओएसएक्स) को संकलित करेगा। डिलीब जिसे मैं जावा से जेएनआई के माध्यम से कॉल कर सकता हूं। इसी तरह, एंड्रॉइड स्टूडियो एक्सएमएल कोड का एक पूरा समूह उत्पन्न करेगा जो जीयूआई चाहता है। हालांकि, बाजेल चाहता है कि सभी जावा ऐप कोड 'वर्कस्पेस' शीर्ष-स्तरीय निर्देशिका (टेन्सफोर्लो रेपो में) के अंदर हों, और एंड्रॉइड स्टूडियो तुरंत एसडीके से बाहरी पुस्तकालयों में जीयूआई बनाने के लिए लिंक करता है (मुझे पता है क्योंकि मेरा बैजल संकलन रन विफल रहता है जब यह इन संसाधनों को नहीं ढूंढ सकता)। एक .so फ़ाइल को पार करने के लिए बेसल को मजबूर करने के लिए मुझे एकमात्र तरीका मिल सकता है, यह इसे एंड्रॉइड नियम का आश्रित नियम बना रहा है। सीधे मूल निबंध को संकलित करना वह है जो मैं अपने एएस को पोर्ट करना पसंद करूंगा एक बेज़ेल परियोजना के लिए कोड।
मैं इसे कैसे स्क्वायर करूं? बेज़ेल एंड्रॉइड कोड संकलित करेगा, लेकिन एंड्रॉइड स्टूडियो कोड उत्पन्न करता है जो बेज़ेल संकलित नहीं कर सकता है। Google के सभी उदाहरण आपको बिना किसी संकेत के किसी रेपो से कोड देते हैं कि यह कैसे उत्पन्न हुआ था। जहां तक मुझे पता है, एक्सएमएल जो एंड्रॉइड स्टूडियो ऐप का हिस्सा है, उसे हाथ से नहीं बनाया जाना चाहिए। अगर इसे हाथ से बनाया जा सकता है, तो मैं उन सभी बाहरी पुस्तकालयों की आवश्यकता से कैसे बचूं?
शायद मुझे वर्कफ़्लो गलत हो रहा है, या बैज़ल/एंड्रॉइड स्टूडियो का कुछ पहलू है जिसे मैं समझ नहीं पा रहा हूं। किसी भी मदद की सराहना की।
धन्यवाद!
संपादित करें:
- मैं नवीनतम Bazel करने के लिए उन्नत:
वहाँ कई चीजें हैं जो मुझे लगता है कि कर समाप्त हो गया सफलतापूर्वक पुस्तकालय भवन में योगदान दिया है हो सकता है थे।
- मैंने स्रोत से टेंसरफ्लो का पुनर्निर्माण किया।
मैं सिफारिश Bazel नीचे फ़ाइल का निर्माण लागू किया कि कुछ अतिरिक्त सुविधा (एंड्रॉयड उदाहरण से लिया गया) के साथ:
cc_binary( name = "libName.so", srcs = ["org_tensorflowtest_MyActivity.cc", "org_tensorflowtest_MyActivity.h", "jni.h", "jni_md.h", ":libpthread.so"], deps = ["//tensorflow/core:android_tensorflow_lib", ], copts = [ "-std=c++11", "-mfpu=neon", "-O2", ], linkopts = ["-llog -landroid -lm"], linkstatic = 1, linkshared = 1, ) cc_binary( name = "libpthread.so", srcs = [], linkopts = ["-shared"], tags = [ "manual", "notap", ], )
मैं सत्यापित नहीं किया है कि इस पुस्तकालय लोड और Android में इस्तेमाल किया जा सकता अभी तक; एंड्रॉइड स्टूडियो 1.5 देशी libs की उपस्थिति को स्वीकार करने के बारे में बहुत मुश्किल लगता है।
एक .dylib बनाना बिल्कुल मदद नहीं करेगा, क्योंकि एंड्रॉइड ओएसएक्स-डाइलिब ओएसएक्स केवल प्रारूप नहीं है। यह लिनक्स है, आपको एक एसएसओ बनाने की जरूरत है (जो कि वही चीज़ फीचर वार है, लेकिन एक अलग फ़ाइल प्रारूप है)। इसके अलावा, एंड्रॉइड में एक्सएमएल हाथ से उत्पन्न नहीं है। किसी भी Google उदाहरण में बहुत कुछ भी उत्पन्न नहीं होता है। तथ्य यह है कि आप इसे होने की उम्मीद कर रहे हैं शायद आपकी समस्या का हिस्सा है। –
इसके अलावा, जब तक कि आपके टेन्स्फोर्लो सॉफ़्टवेयर को बैज़ेल का उपयोग करने की आवश्यकता न हो, मैंने कभी एंड्रॉइड काम के लिए इसका उपयोग नहीं किया है। ग्रैडल नया मानक है, और चींटी विरासत मानक है। यदि आप बाजेल का उपयोग कर रहे हैं तो आप या तो खून बह रहा है या पूरी तरह से अपनी खुद की चीज कर रहे हैं। –
@amm क्या आप इसे एंड्रॉइड पर चलाने में सक्षम थे क्या आपने बनाया ऐप का आकार क्या है? – sau