क्या कोई तरीका है कि मैं कुशलतापूर्वक बूल को यह तय करने में सक्षम कर सकता हूं कि कोई या बी वापस किया जाना चाहिए या नहीं?
हाँ, तुम कर सकते हो
cond * a + (1-cond) * b
cond
(N, M)
आकार के प्रसारित किया जाएगा।
यह सैद्धांतिक सीमा के करीब होना चाहिए, जो स्मृति बैंडविड्थ है: इस ऑपरेशन को N*M
तत्वों को पढ़ने और N*M
लिखने की आवश्यकता है।
इसके बजाय, हम 2*N*M
पढ़ते हैं, लेकिन सशर्त तर्क को हटा दें।
(मैं मेरे सामने थेनो नहीं है, तो मुझे यकीन है कि नहीं कर रहा हूँ अगर यह T.switch
की तुलना में तेजी है, लेकिन के रूप में यह हो जाता है। इसके अलावा इस बारे में के रूप में अच्छा होना चाहिए, मैं एक ही dtype
कास्टिंग cond
कोशिश करता हूँ a
और b
)
के रूप में आप में जगह a
अद्यतन करना चाहते हैं, तो आप यह T.set_subtensor
उपयोग कर सकते हैं:
a = np.random.uniform(size=(N, M)).astype(np.float32)
b = np.random.uniform(size=(N, M)).astype(np.float32)
a = theano.shared(a)
b = theano.shared(b)
c = T.vector() # mostly 0, presumably (1-cond)
nz = T.nonzero(c)
s = T.set_subtensor(a[nz], b[nz])
fn = theano.function([c], [], updates=[(a, s)])
...
fn(1-cond)
यह या तेज नहीं हो सकता टी N
, M
और अन्य कारकों के आधार पर पहला दृष्टिकोण हैन।
उत्तर के लिए धन्यवाद, मैं इसे आज़माउंगा! सैद्धांतिक सीमा के बारे में दिलचस्प विचार। मुझे लगता है कि मैं बड़े पैमाने पर पढ़ने और लिखने से लिख सकता हूं कि अक्सर 'ए' वापस लौटने का सही मूल्य होगा और यह 'ए' को संशोधित करने के तरीके के लिए ठीक है। मान लीजिए कि किसी भी पंक्ति के लिए 'बी' का केवल 5% वापस किया जाना चाहिए, क्या संशोधन में आवश्यक पंक्तियों पर सीधे 'ए' को संशोधित करके बेहतर प्रदर्शन प्राप्त नहीं किया जा सकता है? – pir
@pir क्या आप सीपीयू या जीपीयू के लिए अनुकूलित कर रहे हैं? सामान्य एन, एन और dtype क्या हैं? – MaxB
@pir भी, एनएन का यह हिस्सा है या कुछ जो ढाल की जरूरत है? – MaxB