2015-09-08 4 views
5

मेरे पास निम्न कोड है जो 3 मैट्रिस को 3 डी टेंसर में ढेर करता है।थैनो स्टैक matrices प्रोग्रामेटिक रूप से?

import theano 
import theano.tensor as T 
A = T.matrix("A") 
B = theano.tensor.stack(A, A) 
f = theano.function(inputs=[A], outputs=B) 
print f([range(10)]*2) 

हालांकि, मैं नहीं जानता कि कितनी बार मैं पहले से मैट्रिक्स ढेर की जरूरत है। उदाहरण के लिए कोड की चौथी लाइन हो सकता है:

B = theano.tensor.stack(A, A, A) 
B = theano.tensor.stack(A, A, A, A) 
etc... 

वहाँ एक मैट्रिक्स n बार नकल करने के लिए एक थेनो समारोह है:

theano.some_function(A, 3) = theano.tensor.stack(A, A, A) 

तब मैं पारित कर सकते हैं कि 3, थेनो कार्य करने के लिए एक तर्क के रूप च। क्या यह संभव है? मैंने प्रसारण में देखा लेकिन प्रसारण स्पष्ट रूप से आयाम/ढेर को नहीं बदलता है।

+0

क्या आप सचमुच इस की ज़रूरत है? आप कौनसी समस्याएं हल करने की कोशिश कर रहे हैं? अधिकांशतः, जब मैट्रिक्स प्रतिकृति आती है, तो समस्या से अलग होने पर समस्या को अलग-अलग तैयार किया जा सकता है। मैं चित्र को पूरा करने के लिए प्रसारण का उपयोग करके एक उत्तर पोस्ट करूंगा, लेकिन वास्तविक परिवर्तन जो आप बनाना चाहते हैं वह समस्या-निर्भर है। – eickenberg

उत्तर

1

मैं थेनो के बारे में पता नहीं है, लेकिन आपको इस सूची समझ का उपयोग करने और खोल तर्क सूची हासिल कर:

n = 5 
B = theano.tensor.stack(*[A for dummy in range(n)]) 

जो के बराबर है:

B = theano.tensor.stack(A, A, A, A, A) 

क्या करता है, यह पहले A की n प्रतियों के साथ एक सूची निर्माण करती है और उसके बाद अलग तर्क (https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists देखें) में यह सूची unpacks।

+0

धन्यवाद, कि सामान्य कार्यों लेकिन थेनो लिए काम करता है थोड़ा अलग है: च = theano.function (आदानों = [एक], आउटपुट = बी) एक थेनो समारोह बनाता है, और आदर्श वाक्य रचना कुछ इस तरह होगा: च = थेनो। समारोह (आदानों = [ए, 5], आउटपुट = बी) – applecider

+0

@applecider मैं इस कोशिश की और यह आपके उदाहरण में भी काम किया। लेकिन चूंकि आप पहले से ही एक और समाधान मिला है, यह वास्तव में कोई फर्क नहीं पड़ता। – jure

2

थेनो प्रलेखन के माध्यम से लंबी और कठिन खुदाई के बाद मैं समाधान पाया है:

import theano 
import theano.tensor as T 
A = T.matrix("A") 
B = [A] 
C = theano.tensor.extra_ops.repeat(B, 3, axis=0) 
f = theano.function(inputs=[A], outputs=C) 
print f([range(10)]*2) 

के बराबर है:

import theano 
import theano.tensor as T 
A = T.matrix("A") 
B = theano.tensor.stack(A, A, A) 
f = theano.function(inputs=[A], outputs=B) 
print f([range(10)]*2) 

को छोड़कर अब हम दूसरे के रूप में प्रोग्राम के पुनरावृत्ति की संख्या चुन सकते हैं तर्क: theano.tensor.extra_ops.repeat

2

प्रसारण

01 का उपयोग करके यहां एक उदाहरण दिया गया है
import theano 
import theano.tensor as T 
import numpy as np 

A = T.fmatrix() 
n = T.iscalar() 

ones = T.ones((n, 1, 1)) 

stackedA = ones * A[np.newaxis, :, :] 

f = theano.function([A, n], stackedA) 

a = np.arange(30).reshape(5, 6).astype('float32') 
nn = 3 

r = f(a, nn) 

print r.shape # outputs (3, 4, 5) 
print (r == a[np.newaxis]).all() # outputs True 

यह दृष्टिकोण अगर यह है कि दूर अनुकूलन कर सकते हैं संकलक से बचने टाइलिंग कर सकते हैं।

संबंधित मुद्दे