2015-01-05 4 views
6

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

curl http://localhost:8000/.../?model_input='XYZ' 

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

ऐसे अनुरोधों को प्रबंधित करने के लिए अनुशंसित तरीका क्या है? किसी भी मदद की बहुत सराहना की है। सादर, हालांकि यह अपने सबसे अच्छा प्रदर्शन करता है जब उनमें से किसी के साथ काम कर रहे पैट्रिक

+0

जांचें: [गैर-ओआरएम डेटा स्रोतों के साथ स्वादिष्ट का उपयोग करना] (http://django-tastypie.readthedocs.org/en/latest/non_orm_data_sources.html) –

+1

अत्यधिक टीपी http: //www.django पर डीआरएफ की सलाह देते हैं -rest-framework.org/api-guide/views/ – Anentropic

उत्तर

5

Django बाकी फ्रेमवर्क, एक मॉडल स्रोत, या एक क्वेरीसमूह आवश्यकता नहीं है। It does provide a basic Serializer इस कारण से, as well as basic APIView classes मानक Django क्लास-आधारित विचारों के शीर्ष पर सामग्री वार्ता का उपयोग करने की अनुमति देने के लिए।

आपको संभवतः Serializer का उपयोग करने की आवश्यकता नहीं होगी जब तक कि आप परिणाम ऑब्जेक्ट को क्रमबद्ध नहीं कर रहे हों। Serializer के लिए अन्य सामान्य उपयोग आने वाले डेटा को सत्यापित करने और इसे अपेक्षित प्रारूप में बदलने के लिए है।

यदि आप केवल मूल मूल्य वापस लौट रहे थे (आपने यह निर्दिष्ट नहीं किया था कि "मैट्रिक्स गुणा का परिणाम" वास्तव में क्या हो सकता है), तो मूलभूत विचारों का उपयोग करने से भी यह सब कुछ मैन्युअल रूप से करने से एक कदम है । Response ऑब्जेक्ट जो Django REST Framework प्रदान करता है, आपको मनमानी डेटा वापस करने की अनुमति देता है और इसे स्वचालित रूप से तुलनीय JSON या XML प्रतिनिधित्व में परिवर्तित किया जाता है। आपको json.dumps पर कॉल करने की आवश्यकता नहीं है या डेटा को किसी विशिष्ट प्रतिनिधित्व में कॉल करने की आवश्यकता नहीं है, Response ऑब्जेक्ट यह सब आपके लिए करता है।

from rest_framework.response import Response 
from rest_framework import serializers, views 

class IncredibleInputSerializer(serializers.Serializer): 
    model_input = serializers.CharField() 

class IncredibleView(views.APIView): 

    def get(self, request): 
     # Validate the incoming input (provided through query parameters) 
     serializer = IncredibleInputSerializer(data=request.query_params) 
     serializer.is_valid(raise_exception=True) 

     # Get the model input 
     data = serializer.validated_data 
     model_input = data["model_input"] 

     # Perform the complex calculations 
     complex_result = model_input + "xyz" 

     # Return it in your custom format 
     return Response({ 
      "complex_result": complex_result, 
     }) 

ऊपर के उदाहरण में, हम एक IncredibleInputSerializer कि यकीन है कि यह अनुरोध में शामिल है बनाने के लिए model_input क्वेरी पैरामीटर की पुष्टि करता है बनाएँ। यह एक बहुत ही बुनियादी उदाहरण है, क्योंकि Django REST Framework इनपुट में अतिरिक्त चीजें करने का समर्थन करता है, जैसे इसे or validating में परिवर्तित करना जो कि यह एक विशिष्ट प्रारूप के अनुरूप है।

बेशक, यदि आपको ऑब्जेक्ट या ऑब्जेक्ट्स की सूची को क्रमबद्ध करने की आवश्यकता है, तो जहां डैंजो रीस्ट फ्रेमवर्क एक्सेल करता है। यह मॉडल ऑब्जेक्ट नहीं होना चाहिए, यह डेटा प्राप्त करने के लिए विशेषता या विधियों के साथ एक ऑब्जेक्ट हो सकता है, या यहां तक ​​कि केवल एक मूल शब्दकोश, और Django REST Framework आपके लिए इसे क्रमबद्ध करने में सक्षम होना चाहिए।

+0

आपको बहुत धन्यवाद केविन, आपका उत्तर बहुत सराहना की है! मुझे एहसास है कि यह प्रश्न का एक और पहलू है, लेकिन क्या आपके अनुरोध में हर बार अनुरोध भेजा जाता है जब मैट्रिक्स को लोड करने से बचने के लिए कोई तरीका है? दूसरे शब्दों में, मैट्रिक्स - बहुत बड़ा - सभी अनुरोधों के लिए समान है और जब मैं सर्वर शुरू करता हूं, तो मैं इसे केवल लोड करना चाहता हूं। सबसे अच्छा संबंध है, पैट्रिक – Patrick

+0

ऐसा करने के लिए कुछ प्रकार के वैश्विक राज्य की स्थापना की आवश्यकता होगी, जो आपको डेटा की आवश्यकता के आधार पर अलग-अलग होगा, लेकिन [आप Django की तैयार घटनाओं में शामिल हो सकते हैं] (http://stackoverflow.com/ए/16111968/35 9 284) ऐसा करने के लिए। –

+0

लिंक केविन के लिए धन्यवाद। पाइकलर के पोस्ट को पढ़ने के बाद मैं समझता हूं कि सर्वर शुरू होने पर कुछ कोड निष्पादित किए जा सकते हैं लेकिन मुझे अभी भी यकीन नहीं है कि डेटा * साझा * कैसे किया जा सकता है।वैसे भी मैं इस विशिष्ट प्रश्न को संबोधित करूंगा। धन्यवाद, पैट्रिक – Patrick

संबंधित मुद्दे