2
我有一個用Theano構建的計算圖。它是這樣的:轉換theano張量類型
import theano
from theano import tensor as T
import numpy as np
W1 = theano.shared(np.random.rand(45,32).astype('float32'), 'W1')
b1 = theano.shared(np.random.rand(32).astype('float32'), 'b1')
W2 = theano.shared(np.random.rand(32,3).astype('float32'), 'W2')
b2 = theano.shared(np.random.rand(3).astype('float32'), 'b2')
input = T.matrix('input')
hidden = T.tanh(T.dot(input, W1)+b1)
output = T.nnet.softmax(T.dot(hidden, W2)+b2)
現在,從矢量到矢量的映射。但是,輸入被設置爲矩陣類型,所以我可以同時通過映射傳遞多個向量。我正在做一些機器學習,這使得學習階段更有效率。
的問題是,在學習階段之後,我想查看映射爲矢量爲矢量,所以我可以計算:
jac = theano.gradient.jacobian(output, wrt=input)
jacobian
抱怨輸入不TensorType(float32, vector)
。有沒有一種方法可以在不重建整個計算圖的情況下改變輸入張量類型?
如果沒有具體的例子,無法回答這個問題 - 原則上可以像重塑numpy數組一樣輕鬆地重塑張量。切片也一樣。如果我理解正確,您將需要這些操作之一。 'input.reshape(( - 1,))'產生一個長向量。 'input [:,0]'選擇第一列。 HTH – eickenberg 2014-10-08 20:30:10
在雅可比調用中使用重構或平坦張量的問題是,這種重構的張量不是「輸出」的計算圖的一部分。流程是輸入=> stuff =>輸出。可以在輸入和「東西」之間插入整形嗎? – 2014-10-08 20:40:55
我不知道。但是,如果我們有一個工作示例,我們可以找出:) – eickenberg 2014-10-08 20:47:07