थानो पर भारित बाइनरी क्रॉसएन्त्रॉपी को कैसे कार्यान्वित करें?थानो पर भारित बाइनरी क्रॉसएन्त्रॉपी को कैसे कार्यान्वित करें?
मेरा कनवॉल्यूशनल तंत्रिका नेटवर्क केवल 0 ~~ 1 (सिग्मोइड) की भविष्यवाणी करता है।
मैं इस तरह से मेरी भविष्यवाणियों को दंडित करना चाहते हैं:
असल में, मैं और अधिक दंडित करने का जब मॉडल भविष्यवाणी 0 चाहते हैं, लेकिन सच्चाई था 1.
प्रश्न: मैं इस वेटेड बाइनरी क्रॉसएन्त्रॉपी फ़ैरानो और लासगेन का उपयोग करके फ़ंक्शन कैसे बना सकता हूं?
मैं
prediction = lasagne.layers.get_output(model)
import theano.tensor as T
def weighted_crossentropy(predictions, targets):
# Copy the tensor
tgt = targets.copy("tgt")
# Make it a vector
# tgt = tgt.flatten()
# tgt = tgt.reshape(3000)
# tgt = tgt.dimshuffle(1,0)
newshape = (T.shape(tgt)[0])
tgt = T.reshape(tgt, newshape)
#Process it so [index] < 0.5 = 0 , and [index] >= 0.5 = 1
# Make it an integer.
tgt = T.cast(tgt, 'int32')
weights_per_label = theano.shared(lasagne.utils.floatX([0.2, 0.4]))
weights = weights_per_label[tgt] # returns a targets-shaped weight matrix
loss = lasagne.objectives.aggregate(T.nnet.binary_crossentropy(predictions, tgt), weights=weights)
return loss
loss_or_grads = weighted_crossentropy(prediction, self.target_var)
नीचे इस की कोशिश की लेकिन मैं नीचे इस त्रुटि मिलती है:
लेखन त्रुटि: आकृति बदलें में नई आकार एक वेक्टर या अदिश की एक सूची/टपल होना चाहिए। एक वेक्टर में रूपांतरण के बाद Subtensor {int64} .0 मिला।
संदर्भ: https://github.com/fchollet/keras/issues/2115
संदर्भ: https://groups.google.com/forum/#!topic/theano-users/R_Q4uG9BXp8
चूंकि आप 'binary_crossentropy (..) 'का उपयोग कर रहे हैं, इसलिए हर गलत भविष्यवाणी के लिए जुर्माना होगा। असंतुलित डेटासेट से निपटने के तरीके को देखने के लिए आपको वास्तव में क्या चाहिए, यह [लिंक] (http://www.svds.com/learning-imbalanced-classes/) उपयोगी हो सकता है। – uyaseen
कौन सी लाइन – Julius