Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regression with lasagne: error

I am trying to run a regression with lasagne/nolearn. I am having trouble finding documentation how to do that (new to deep learning in general).

Starting off with a simple network (one hidden layer)

from lasagne import layers

from lasagne.nonlinearities import softmax
from lasagne.updates import nesterov_momentum
from nolearn.lasagne import NeuralNet    

print(np.shape(X)) # (137, 43)
print(np.shape(y)) # (137,)

layers_s = [('input', layers.InputLayer),
           ('dense0', layers.DenseLayer),
           ('output', layers.DenseLayer)]

net_s = NeuralNet(layers=layers_s,

                 input_shape=(None, num_features),
                 dense0_num_units=43,
                 output_num_units=1,
                 output_nonlinearity=None,

                 regression=True,

                 update=nesterov_momentum,
                 update_learning_rate=0.001,
                 update_momentum=0.9,

                 eval_size=0.2,
                 verbose=1,
                 max_epochs=100)

net_s.fit(X, y)

I get the following error:

TypeError                                 Traceback (most recent call last)
<ipython-input-23-23c15ceec104> in <module>()
----> 1 net_s.fit(X, y)

/home/alex/anaconda3/lib/python3.4/site-packages/nolearn/lasagne.py in fit(self, X, y)
    148             out, self.loss, self.update,
    149             self.X_tensor_type,
--> 150             self.y_tensor_type,
    151             )
    152         self.train_iter_, self.eval_iter_, self.predict_iter_ = iter_funcs

/home/alex/anaconda3/lib/python3.4/site-packages/nolearn/lasagne.py in _create_iter_funcs(self, output_layer, loss_func, update, input_type, output_type)
    298         all_params = get_all_params(output_layer)
    299         update_params = self._get_params_for('update')
--> 300         updates = update(loss_train, all_params, **update_params)
    301 
    302         train_iter = theano.function(

/home/alex/src/lasagne/lasagne/updates.py in nesterov_momentum(loss, all_params, learning_rate, momentum)
     38 # such that the gradient can be evaluated at the current parameters.
     39 def nesterov_momentum(loss, all_params, learning_rate, momentum=0.9):
---> 40     all_grads = theano.grad(loss, all_params)
     41     updates = []
     42 

/home/alex/anaconda3/lib/python3.4/site-packages/theano/gradient.py in grad(cost, wrt, consider_constant, disconnected_inputs, add_names, known_grads, return_disconnected)
    431 
    432     if cost is not None and cost.ndim != 0:
--> 433         raise TypeError("cost must be a scalar.")
    434 
    435     if isinstance(wrt, set):

TypeError: cost must be a scalar.

Thanks!..

like image 947
Anarcho-Chossid Avatar asked Mar 25 '26 21:03

Anarcho-Chossid


2 Answers

Make sure that you're using versions of nolearn and Lasagne that are known to work together.

Say you've been following the Using convolutional neural nets to detect facial keypoints tutorial. Then the right thing to do is to install the dependencies from this requirements.txt file, like so:

pip uninstall Lasagne
pip uninstall nolearn
pip install -r https://raw.githubusercontent.com/dnouri/kfkd-tutorial/master/requirements.txt

If, however, you're using nolearn from Git master, then make sure you install the Lasagne version that's in the requirements.txt file found there:

pip uninstall Lasagne
pip install -r https://raw.githubusercontent.com/dnouri/nolearn/master/requirements.txt
like image 71
Daniel Nouri Avatar answered Mar 28 '26 11:03

Daniel Nouri


Not sure what version of nolearn and lasagne you are using. I did notice that you have y as being of shape (137,). From my usage this needs to be (137, 1) to work for your case, and, in general, dim 2 needs to match the output_num_units.

Try y.reshape((-1, 1)).

If this doesn't work it may be a Python 3 compatibility issue.

like image 37
APage Avatar answered Mar 28 '26 11:03

APage



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!