Sparse_softmax_cross_entropy_with_logits और softmax_cross_entropy_with_logits में क्या अंतर है?


111

मैं हाल ही में tf.nn.sparse_softmax_cross_entropy_with_logits के पार आया और मैं यह नहीं जान पाया कि अंतर की तुलना क्या है tf.nn.softmax_crossmententy_with_logits

एकमात्र अंतर यह है कि प्रशिक्षण वैक्टर yको एक-गर्म एन्कोडेड होना चाहिए का उपयोग करते समयsparse_softmax_cross_entropy_with_logits ?

एपीआई को पढ़ना, मुझे तुलना में कोई अन्य अंतर नहीं मिला softmax_cross_entropy_with_logits । लेकिन फिर हमें अतिरिक्त फ़ंक्शन की आवश्यकता क्यों है?

अगर यह एक गर्म एन्कोडेड प्रशिक्षण डेटा / वैक्टर के साथ आपूर्ति की जाती है, तो softmax_cross_entropy_with_logitsउसी परिणाम का उत्पादन नहीं करना चाहिए sparse_softmax_cross_entropy_with_logits?


1
अगर दोनों का उपयोग किया जा सकता है (जैसे कि एक्सक्लूसिव इमेज लेबल के साथ) तो उनके प्रदर्शन की तुलना देखने में मेरी दिलचस्पी है; मुझे उम्मीद है कि विरल संस्करण अधिक कुशल होगा, कम से कम मेमोरी-वार।
Yibo यांग

1
इस प्रश्न को भी देखें , जो टेंसोफ़्लो में सभी क्रॉस-एंट्रॉपी कार्यों पर चर्चा करता है (पता चलता है कि उनमें से बहुत सारे हैं)।
मैक्सिम

जवाबों:


175

दो अलग-अलग कार्य होने से सुविधा होती है , क्योंकि वे एक ही परिणाम उत्पन्न करते हैं।

अंतर सरल है:

  • के लिए sparse_softmax_cross_entropy_with_logits, लेबल का आकार [बैच_ आकार] और dtype int32 या int64 होना चाहिए। प्रत्येक लेबल रेंज में एक इंट है [0, num_classes-1]
  • के लिए softmax_cross_entropy_with_logits, लेबल्स का आकार [बैच_साइज़, अंक_क्लासेस] और dtype float32 या float64 होना चाहिए।

लेबल में इस्तेमाल softmax_cross_entropy_with_logitsकर रहे हैं एक गर्म संस्करण में इस्तेमाल किया लेबल की sparse_softmax_cross_entropy_with_logits

एक और छोटा सा अंतर यह है कि sparse_softmax_cross_entropy_with_logitsआप 0इस लेबल पर नुकसान होने के लिए लेबल के रूप में -1 दे सकते हैं ।


15
क्या -1 सही है? जैसा कि प्रलेखन में लिखा है: "लेबल्स में प्रत्येक प्रविष्टि को [0, num_classes) में एक इंडेक्स होना चाहिए। अन्य ऑप्शन सीपीयू पर चलने पर एक अपवाद बढ़ाएगा, और GPU पर इसी नुकसान और ढाल पंक्तियों के लिए NaN लौटाएगा।"
user1761806

1
[0, num_classes) = [0, num_classes-1]
कार्तिक C

24

मैं सिर्फ 2 चीजों को स्वीकृत उत्तर में जोड़ना चाहूंगा जिन्हें आप टीएफ प्रलेखन में भी पा सकते हैं।

प्रथम:

tf.nn.softmax_cross_entropy_with_logits

नोट: जबकि कक्षाएं परस्पर अनन्य हैं, उनकी संभावनाओं की आवश्यकता नहीं है। यह आवश्यक है कि लेबल की प्रत्येक पंक्ति एक वैध संभावना वितरण है। यदि वे नहीं हैं, तो ढाल की गणना गलत होगी।

दूसरा:

tf.nn.sparse_softmax_cross_entropy_with_logits

नोट: इस ऑपरेशन के लिए, किसी दिए गए लेबल की संभावना को विशेष माना जाता है। यही है, नरम वर्गों की अनुमति नहीं है, और लेबल वेक्टर को लॉग की प्रत्येक पंक्ति (प्रत्येक छोटा प्रवेश) के लिए सच्चे वर्ग के लिए एक एकल विशिष्ट सूचकांक प्रदान करना होगा।


4
यदि कक्षाएं परस्पर अनन्य नहीं हैं तो हमें क्या उपयोग करना चाहिए। मेरा मतलब है कि अगर हम कई श्रेणीबद्ध लेबल का संयोजन कर रहे हैं?
हायरो

मैंने भी इसे पढ़ा। तो इसका मतलब है कि हम वर्ग संभावना को क्रॉस एन्ट्रापी पर लागू करते हैं बजाय इसे एक आउथ वेक्टर के रूप में लेने के।
शामे सिरीवर्धन

@ हायरो - क्या आपका मतलब है कि आप एक हॉट एन्कोडिंग करने में असमर्थ हैं? मुझे लगता है कि आपको एक अलग मॉडल देखना होगा। इसने कुछ इस तरह का उल्लेख किया "यह 4 बाइनरी लॉजिस्टिक रिग्रेशन क्लासिफायर बनाने के लिए अधिक उपयुक्त होगा" यह सुनिश्चित करने के लिए कि आप कक्षाओं को अलग कर सकते हैं।
एशले

21

दोनों फ़ंक्शन समान परिणाम की गणना करते हैं और sparse_softmax_cross_entropy_with_logits एक-गर्म एन्कोडिंग के साथ परिवर्तित करने के बजाय सीधे विरल लेबल पर क्रॉस एन्ट्रॉपी की गणना करते हैं ।

आप निम्न कार्यक्रम चलाकर इसे सत्यापित कर सकते हैं:

import tensorflow as tf
from random import randint

dims = 8
pos  = randint(0, dims - 1)

logits = tf.random_uniform([dims], maxval=3, dtype=tf.float32)
labels = tf.one_hot(pos, dims)

res1 = tf.nn.softmax_cross_entropy_with_logits(       logits=logits, labels=labels)
res2 = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=tf.constant(pos))

with tf.Session() as sess:
    a, b = sess.run([res1, res2])
    print a, b
    print a == b

यहां मैं logitsलंबाई का एक यादृच्छिक वेक्टर बनाता हूं dimsऔर एक-गर्म एन्कोडेड लेबल उत्पन्न करता हूं (जहां तत्व pos1 है और अन्य 0 हैं)।

उसके बाद मैंने सॉफ्टमैक्स और स्पार्स सॉफ्टमैक्स की गणना की और उनके आउटपुट की तुलना की। यह सुनिश्चित करने के लिए कि यह हमेशा एक ही आउटपुट का उत्पादन करता है, इसे कुछ बार पुन: निर्देशित करने का प्रयास करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.