我使用Theano創建一個神經網絡,但是當我嘗試回報張量的兩個列表在列表同時我得到的錯誤:Theano多張量作爲輸出
#This is the line that causes the error
#type(nabla_w) == <type 'list'>
#type(nabla_w[0]) == <class 'theano.tensor.var.TensorVariable'>
backpropagate = function(func_inputs, [nabla_w, nabla_b])
TypeError: Outputs must be theano Variable or Out instances. Received [dot.0, dot.0, dot.0, dot.0] of type <type 'list'>
什麼一種Theano結構的我應該用兩個張量在數組一起返回,所以我可以這樣進行檢索:
nabla_w, nabla_b = backpropagate(*args)
我試着用一些我在basic Tensor functionality page發現的東西,但這些都不工作。 (例如,我試圖堆棧或stacklists)
以下是錯誤我開始使用theano.tensor.stack或stacklists:
ValueError: all the input array dimensions except for the concatenation axis must match exactly
Apply node that caused the error: Join(TensorConstant{0}, Rebroadcast{0}.0, Rebroadcast{0}.0, Rebroadcast{0}.0, Rebroadcast{0}.0)
Inputs shapes: [(), (1, 10, 50), (1, 50, 100), (1, 100, 200), (1, 200, 784)]
Inputs strides: [(), (4000, 400, 8), (40000, 800, 8), (160000, 1600, 8), (1254400, 6272, 8)]
Inputs types: [TensorType(int8, scalar), TensorType(float64, 3D), TensorType(float64, 3D), TensorType(float64, 3D), TensorType(float64, 3D)]
Use the Theano flag 'exception_verbosity=high' for a debugprint of this apply node.
一點點額外的上下文代碼:
weights = [T.dmatrix('w'+str(x)) for x in range(0, len(self.weights))]
biases = [T.dmatrix('b'+str(x)) for x in range(0, len(self.biases))]
nabla_b = []
nabla_w = []
# feedforward
x = T.dmatrix('x')
y = T.dmatrix('y')
activations = []
inputs = []
activations.append(x)
for i in xrange(0, self.num_layers-1):
inputt = T.dot(weights[i], activations[i])+biases[i]
activation = 1/(1 + T.exp(-inputt))
activations.append(activation)
inputs.append(inputt)
delta = activations[-1]-y
nabla_b.append(delta)
nabla_w.append(T.dot(delta, T.transpose(inputs[-2])))
for l in xrange(2, self.num_layers):
z = inputs[-l]
spv = (1/(1 + T.exp(-z))*(1 - (1/(1 + T.exp(-z)))))
delta = T.dot(T.transpose(weights[-l+1]), delta) * spv
nabla_b.append(delta)
nabla_w.append(T.dot(delta, T.transpose(activations[-l-1])))
T.set_subtensor(nabla_w[-l], T.dot(delta, T.transpose(inputs[-l-1])))
func_inputs = list(weights)
func_inputs.extend(biases)
func_inputs.append(x)
func_inputs.append(y)
backpropagate = function(func_inputs, [nabla_w, nabla_b])
默認情況下'''[some,stuff]'''構造是一個python列表。如果Theano需要一個數組,你可能需要使用'''array()'''構造函數(對於Python 2.x)[在這裏](https://docs.python.org/2/library/array)。 HTML#模塊陣列)。 – theWanderer4865 2014-11-21 15:25:18
忘了提及nabla_w和nabla_b已經列出。我所做的問題是它不接受張量列表。 – 2014-11-21 15:34:08
這應該工作如果正確(我經常使用這個)。不幸的是,代碼不是自包含的,所以我無法弄清楚可能出錯的地方。你能否提供一個可以複製和粘貼的最簡單的例子來進行分析?否則,你將不得不依賴於這個論壇中很少有人已經知道錯誤消息必然發生了什麼。 – eickenberg 2014-11-22 18:32:16