2016-04-25 6 views
7

मैं पूरी तरह से संक्रामक नेटवर्क की तरह कुछ लागू करने की कोशिश कर रहा हूं, जहां अंतिम रूपांतरण परत फिल्टर आकार 1x1 का उपयोग करती है और 'स्कोर' टेंसर आउटपुट करती है। स्कोर टेंसर आकार [बैच, ऊंचाई, चौड़ाई, num_classes] है।पूरी तरह से संक्रामक नेटवर्क के लिए प्रति पिक्सेल सॉफ्टमैक्स

मेरा सवाल यह है कि, टेंसफोर्लो में कौन सा फ़ंक्शन प्रत्येक पिक्सेल के लिए सॉफ्टमैक्स ऑपरेशन लागू कर सकता है, जो अन्य पिक्सेल से स्वतंत्र है। Tf.nn.softmax ops ऐसे उद्देश्य के लिए नहीं लगता है।

यदि ऐसे कोई ओप उपलब्ध नहीं है, तो मुझे लगता है कि मुझे खुद को लिखना है।

धन्यवाद!

अद्यतन: अगर मुझे खुद को लागू करना है, तो मुझे लगता है कि मुझे इनपुट टेंसर को [एन, num_claees] में दोबारा बदलने की आवश्यकता हो सकती है, जहां एन = बैच x चौड़ाई x ऊंचाई, और tf.nn.softmax लागू करें, फिर इसे दोबारा बदलें वापस। क्या इस का कोई मतलब निकलता है?

+0

आप इसे 2 डी मैट्रिक्स में दोबारा बना सकते हैं, सॉफ्टमैक्स कर सकते हैं, फिर वापस दोबारा बदल सकते हैं। – Aaron

+0

आह, आपकी टिप्पणियों के साथ एक ही समय में अपडेट करें। लेकिन धन्यवाद! –

+0

अरे, क्या आपने अंत में इसे कार्यान्वित किया था? मैं यहाँ फंस गया हूँ। –

उत्तर

3

इसे 2 डी तक दोबारा बदलना और उसके बाद इसे फिर से बदलना, जैसा आपने अनुमान लगाया है, सही दृष्टिकोण है।

1

आप इस फ़ंक्शन का उपयोग कर सकते हैं।

मुझे इसे GitHub से खोजकर मिला।

import tensorflow as tf 

""" 
Multi dimensional softmax, 
refer to https://github.com/tensorflow/tensorflow/issues/210 
compute softmax along the dimension of target 
the native softmax only supports batch_size x dimension 
""" 
def softmax(target, axis, name=None): 
    with tf.name_scope(name, 'softmax', values=[target]): 
     max_axis = tf.reduce_max(target, axis, keep_dims=True) 
     target_exp = tf.exp(target-max_axis) 
     normalize = tf.reduce_sum(target_exp, axis, keep_dims=True) 
     softmax = target_exp/normalize 
     return softmax 
संबंधित मुद्दे