मेरे पास probs.shape = (max_time, num_batches, num_labels)
के साथ एक टेंसर probs
है।टेंसर के लिए थेनो उन्नत इंडेक्सिंग, साझा सूचकांक
और मेरे पास targets
targets.shape = (max_seq_len, num_batches)
के साथ एक टेंसर है जहां मान लेबल इंडेक्स हैं, यानी probs
में तीसरे आयाम के लिए।
अब मैं probs.shape = (max_time, num_batches, max_seq_len)
के साथ एक टेंसर प्राप्त करना चाहता हूं जहां तीसरा आयाम targets
में सूचकांक है। मूल रूप से
probs_y[:,i,:] = probs[:,i,targets[:,i]]
सभी 0 <= i < num_batches
के लिए।
मैं इसे कैसे प्राप्त कर सकता हूं?
समाधान के साथ एक समान समस्या here पोस्ट की गई थी।
वहाँ समाधान है, अगर मैं सही ढंग से समझ, होगा:
probs_y = probs[:,T.arange(targets.shape[1])[None,:],targets]
लेकिन वह काम करने के लिए प्रतीत नहीं होता। मुझे मिलता है: IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
।
इसके अलावा, अस्थायी T.arange
थोड़ा महंगा नहीं है? Esp जब मैं वास्तव में इसे एक पूर्ण घना पूर्णांक सरणी बनाकर काम करने की कोशिश करता हूं। एक बेहतर तरीका होना चाहिए।
शायद theano.map
? लेकिन जहां तक मैं समझता हूं, वह कोड को समानांतर नहीं करता है, इसलिए यह समाधान भी नहीं है।
बस एहसास हुआ कि मैंने आपकी लाइन से अलग-अलग किया है कि मैंने अक्षरों को 'टी। तारेंज' और 'लक्ष्य' दोनों में स्थानांतरित किया है। यह अजीब है। आपके मामले में भी काम करना चाहिए था। – eickenberg
ठीक है, जिस तरह से आप इसे करते हैं, वह भी काम करता है, मैंने अपना जवाब अपडेट किया। तो समस्या कहीं और है। या तो थानो संस्करण या कुछ इस विशिष्ट ऑपरेशन से संबंधित नहीं है - हालांकि त्रुटि संदेश दिया गया है, बाद वाला असंभव प्रतीत होता है। – eickenberg