2016-12-29 7 views
2

おもちゃ回帰の例。 dropout=0.0でこれはうまく動作し、コストが下がります。 dropout=0.5でエラーが発生します:なぜ、私はラセーン回帰モデルの最後の層でドロップアウトを使用できないのですか?

ValueError: Got num_leading_axes=1 for a 1-dimensional input, leaving no trailing axes for the dot product. 

import theano 
import theano.tensor as T 
import lasagne 
import numpy as np 

num_features=10 
N=1000 

# Set up the network                                                      
x=T.fmatrix('x') 
y=T.fvector('y') 

dropout=0.5 
network = lasagne.layers.InputLayer(shape=(None, num_features), input_var=x) 
if dropout > 0.0: 
    network = lasagne.layers.dropout(network, p=dropout), 
network = lasagne.layers.DenseLayer(network, num_units=1, nonlinearity=None) 

pred = lasagne.layers.get_output(network) 

cost = lasagne.objectives.squared_error(pred, y).mean() 

# Compile training function                                                     
params = lasagne.layers.get_all_params(network, trainable=True) 
train_fn = theano.function([x, y], cost, updates=lasagne.updates.adamax(cost, params)) 

# Generate some synthetic data                                                    
X=np.random.randn(N,num_features).astype(theano.config.floatX) 
b=np.random.randn(num_features).astype(theano.config.floatX) 
Y=np.dot(X, b) + np.random.randn(N).astype(theano.config.floatX) * 0.1 

# Train for 100 iterations                                                     
for i in range(100): 
    print train_fn(X,Y) 

答えて

2

ドロップアウトレイヤーの後にカンマを削除します。 コードは、InputLayerまたはDenseLayerの直後にドロップアウトとともに機能します。コンマは、エラーの原因となるネットワーク変数(ネットワーク)でタプルを作成します。

network = lasagne.layers.InputLayer(shape=(None, num_features), input_var=x) 
if dropout > 0.0: 
    network = lasagne.layers.dropout(network, p=dropout), 
network = lasagne.layers.DenseLayer(network, num_units=1, nonlinearity=None) 
+0

素晴らしいスポット、ありがとうございました!それは私が前に出会ったPythonのやり方ではありません。 – daknowles

関連する問題