2015-12-15 13 views
7

में मैट्रिक्स गुणात्मक फ़ंक्शन का उपयोग मैं टेंसरफ़्लो में फ़ंक्शन tf.matmul() फ़ंक्शन के उपयोग के बारे में थोड़ा उलझन में हूं। हालांकि, मेरा सवाल गहरी शिक्षा के सिद्धांत के बारे में अधिक हो सकता है। मान लें कि आपके पास इनपुट एक्स और वेट मैट्रिक्स डब्ल्यू है (शून्य पूर्वाग्रह मानते हुए), मैं डब्ल्यूएक्स को एक आउटपुट के रूप में गणना करना चाहता हूं जो tf.matmul(W, X) द्वारा किया जा सकता है। हालांकि, ट्यूटोरियल MNIST for beginners में इसे उलट दिया गया है और इसके बजाय tf.matmul(X, W) का उपयोग किया जाता है। दूसरी तरफ, अगले ट्यूटोरियल में TensorFlow Mechanics 101, tf.matmul(W, X) का उपयोग किया जाता है। चूंकि गुणा के लिए मैट्रिक्स आकार महत्वपूर्ण हैं, इसलिए मुझे आश्चर्य है कि कोई इस मुद्दे को स्पष्ट कर सकता है या नहीं।टेंसरफ्लो

उत्तर

2

मुझे टेंसरफ्लो के बारे में बहुत कुछ पता नहीं है, लेकिन सहजता से मुझे लगता है कि भ्रम इनपुट के डेटा प्रतिनिधित्व के संबंध में है। जब आप कहते हैं कि आप X वजन W के साथ इनपुट को गुणा करना चाहते हैं तो मुझे लगता है कि आपका मतलब यह है कि आप प्रत्येक आयाम (फीचर) को इसके समान वजन के साथ गुणा करना चाहते हैं और योग लेना चाहते हैं। इसलिए यदि आपके पास x इनपुट m आयाम के साथ इनपुट है, तो आपके पास m मानों के साथ वजन वेक्टर w होना चाहिए (m+1 यदि आप पूर्वाग्रह मानते हैं)।

अब अगर आप एक मैट्रिक्स X की पंक्तियों के रूप में विभिन्न प्रशिक्षण उदाहरणों का प्रतिनिधित्व करने के लिए चुनते हैं, तो आप X * w प्रदर्शन करने के बजाय अगर आप उन्हें स्तंभों के रूप में प्रतिनिधित्व करने के लिए चुनते है,, आप क्या करेंगे w^T * X

+1

यदि आप बैच में एकाधिक प्रशिक्षण उदाहरण चाहते हैं, तो आपको 'tf.batch_matmul' का उपयोग करने की आवश्यकता है, जो आंतरिक रूप से पहले आयाम को बैच आयाम के रूप में मानता है। याद रखें कि वजन एक मैट्रिक्स हो सकता है, वेक्टर नहीं: आप इनपुट सुविधाओं के विभिन्न भारों के आधार पर कई आउटपुट उत्पन्न कर सकते हैं। मैंने इसे इंगित करने के लिए अपना जवाब अपडेट कर दिया है। – dga

+0

धन्यवाद @jMathew। मेरे विचार से आप सही है। मैं मान रहा था कि इनपुट को (n_Features x n_Samples) के रूप में दर्शाया जाना चाहिए, लेकिन यह उदाहरणों में से अधिकांश में एक और तरीका प्रतीत होता है। डीजीए, इसका कोई संबंध नहीं है कि डब्ल्यू वेक्टर है या हम स्नान कर रहे हैं। – sergulaydore

5

मुझे लगता है कि आपको यांत्रिकी 101 ट्यूटोरियल को गलत तरीके से पढ़ना होगा - या आप विशिष्ट रेखा को इंगित कर सकते हैं?

सामान्य रूप से, नेटवर्क परत के लिए, मैं वजन के माध्यम से "बहने" इनपुट के बारे में सोचता हूं। इसका प्रतिनिधित्व करने के लिए, मैं उस परत के आउटपुट का उत्पादन करने के लिए tf.matmul(Inputs, Weights) लिखता हूं। उस आउटपुट में उसके बाद एक पूर्वाग्रह b जोड़ा जा सकता है, और इसके परिणामस्वरूप एक रेलाइन जैसे गैर-लाइनर फ़ंक्शन में और फिर अगले tf.matmul में अगली परत के इनपुट के रूप में खिलाया गया।

दूसरा, याद रखें कि कई आउटपुट बनाने के लिए वजन मैट्रिक्स का आकार बदला जा सकता है। यही कारण है कि यह सिर्फ एक वेक्टर नहीं बल्कि एक मैट्रिक्स है। उदाहरण के लिए, यदि आप दो छिपी हुई इकाइयां चाहते थे और आपके पास पांच इनपुट फीचर्स थीं, तो आप एक आकार [5, 2] वज़न मैट्रिक्स का उपयोग करेंगे, इस तरह (प्रदर्शनी की आसानी के लिए numpy में दिखाया गया है - आप tensorflow में एक ही चीज़ कर सकते हैं):

import numpy as np 
a = np.array([1, 2, 3, 4, 5]) 
W = np.array([[.5, .6], [.7, .8], [.9, .1], [.2, .3], [.4, .5]]) 

>>> np.dot(a, W) 
array([ 7.4, 6.2]) 

यह है अच्छा व्यवहार है कि यदि आप तो a करने के लिए एक बैच आयाम जोड़, यह अभी भी काम करता है: एक = np.array [[1, 2, 3, 4, 5], [6, 7, 8, 9, 0]]

>>> np.dot(a, W) 
array([[ 7.4, 6.2], 
     [ 20.9, 17.7]]) 

यह ठीक आप क्या कर रहे हैं जब आप tf.matmul का उपयोग इनपुट से जाने के लिए है छिपा इकाइयों के लिए सुविधाओं, या छिपी हुई इकाइयों की एक परत से दूसरे तक।

+0

जवाब के लिए धन्यवाद, लेकिन मैं अभी भी उलझन में हूँ। हमें वजन * इनपुट की गणना करने की आवश्यकता है तो क्यों नहीं tf.matmul (भार, इनपुट)? tf.matmul (ए, डब्ल्यू) डब्ल्यू * ए के बजाय एक * डब्ल्यू पैदा करता है। – sergulaydore

+0

मुझे इस तरह से लगता है: कल्पना कीजिए कि आपके वजन मैट्रिक्स में 5 सक्रियण आ रहे हैं, और आप इस गणना से 2 आउटपुट चाहते हैं। परत में आपका "इनपुट आकार" 5 है, और परत से आपका "आउटपुट" आकार 2 है। इसके अलावा, आपके पास बैच आकार बी है। मुझे इसका प्राकृतिक प्रतिनिधित्व मिलता है कि आपका इनपुट 'बी, 5] है बैच होने वाले पहले आयाम के साथ। यदि आप अपना वजन मैट्रिक्स '[5x2] 'मैट्रिक्स के रूप में सेट करते हैं, तो आप किसी भी बैच आकार को गुणा कर सकते हैं:' [बी x 5] * [5 x 2] -> [बी, 2]'। आप निश्चित रूप से दोनों मैट्रिस को स्थानांतरित कर सकते हैं और 'W_t * a_t' गुणा कर सकते हैं। – dga

+0

दुर्भाग्य से यहां चर्चा की गई: http://stackoverflow.com/a/34908326/281545 np।डॉट tf.matmul semantics से मेल नहीं खाता है - विशेष रूप से दोनों ऑपरेटरों matrices होना चाहिए। कोई कामकाज? –

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