I've been trying to run a neural network with the following code:
model=Sequential()
model.add(Dense(output_dim=40, input_dim=90, init="glorot_uniform"))
model.add(Activation("tanh"))
model.add(Dense(output_dim=10, init="glorot_uniform"))
model.add(Activation("linear"))
model.compile(loss="mean_absolute_percentage_error", optimizer="rmsprop")
model.fit(X=predictor_train, y=target_train, nb_epoch=2, batch_size=90,show_accuracy=True)
I haven't been able to find out what this error means:
raise ValueError(base_exc_str)
ValueError: Dimension mismatch; shapes are (98, 10), (98, 1)
As far as I understand, the shapes should be equal, like (98,10), (98,10)
or (98,1),(98,1)
and that's what causing the problem. Is that right?
If yes, does anyone know where can I fix this in the code or in the dataset? What does that 10 and 1 mean?
If no, can anyone explain to me what is happening?
EXTRA INFORMATION:
Variable predictor_train:
predictor_train.shape = (98, 90)
type(predictor_train) = numpy.ndarray
predictor_train.dtype = float64
len(predictor_train) = 98
predictor_train = [[ -9.28079499e+03 -5.44726790e+03 9.77551565e+03 ..., -2.94089612e+01
1.05007607e+01 9.32395201e+00]
[ -9.32333218e+03 -4.06918099e+03 8.84849310e+03 ..., 3.02589395e+01
1.32480085e+01 7.35936371e+00]
[ -9.08950902e+03 -2.59672093e+03 6.78783637e+03 ..., -7.22732280e+00
-8.72789507e+00 -3.38694330e+01]
...,
[ 6.00971088e+03 4.82090785e+02 2.06287833e+03 ..., 5.07504624e+00
-1.08715262e+01 -4.44630971e+00]
[ 6.02593657e+03 1.04561016e+03 1.19684456e+03 ..., 2.10305449e+01
-1.00583976e+01 -5.45816394e-01]
[ 6.11828134e+03 1.50004864e+03 3.00936969e+02 ..., -1.66676535e+01
6.07002336e+00 3.00131153e+00]]
Variable target_train:
target_train.shape = (98,)
type(target_train) = pandas.core.series.Series
target_train.dtype = float64
len(target_train) = 98
target_train =
Date
2007-07-01 0.009137
2007-08-01 0.010607
2007-09-01 0.007146
...
2015-06-01 -0.008642
2015-07-01 -0.008642
2015-08-01 -0.008642
Freq: MS, Name: Actual, dtype: float64
Full Traceback:
Traceback (most recent call last):
File "/Users/santanna_santanna/PycharmProjects/Predictive Models/teste2.py", line 1479, in Pred
model.fit(X=predictor_train, y=target_train, nb_epoch=2, batch_size=90,show_accuracy=True)
File "/Library/Python/2.7/site-packages/keras/models.py", line 581, in fit
shuffle=shuffle, metrics=metrics)
File "/Library/Python/2.7/site-packages/keras/models.py", line 239, in _fit
outs = f(ins_batch)
File "/Library/Python/2.7/site-packages/keras/backend/theano_backend.py", line 365, in __call__
return self.function(*inputs)
File "/Library/Python/2.7/site-packages/theano/compile/function_module.py", line 595, in __call__
outputs = self.fn()
File "/Library/Python/2.7/site-packages/theano/gof/vm.py", line 233, in __call__
link.raise_with_op(node, thunk)
File "/Library/Python/2.7/site-packages/theano/gof/vm.py", line 229, in __call__
thunk()
File "/Library/Python/2.7/site-packages/theano/gof/op.py", line 768, in rval
r = p(n, [x[0] for x in i], o)
File "/Library/Python/2.7/site-packages/theano/tensor/elemwise.py", line 808, in perform
raise ValueError(base_exc_str)
ValueError: Dimension mismatch; shapes are (98, 10), (98, 1)
Apply node that caused the error: Elemwise{Sub}[(0, 0)](Elemwise{Add}[(0, 0)].0, <TensorType(float32, matrix)>)
Inputs types: [TensorType(float32, matrix), TensorType(float32, matrix)]
Inputs shapes: [(98, 10), (98, 1)]
Inputs strides: [(40, 4), (4, 4)]
Inputs values: ['not shown', 'not shown']
HINT: Re-running with most Theano optimization disabled could give you a back-trace of when this node was created. This can be done with by setting the Theano flag 'optimizer=fast_compile'. If that does not work, Theano optimizations can be disabled with 'optimizer=None'.
HINT: Use the Theano flag 'exception_verbosity=high' for a debugprint and storage map footprint of this apply node.
The mismatch is between the expected output dimension (98,10) and the dimension of the data you're using (98,1)
That is because you're using a sample code that is supposed to do classification on a 10-class database. If you want to do prediction then change your last layer to
model.add(Dense(output_dim=1, init="glorot_uniform"))
Also, I think you will have problems with your cost function. You're not supposed to use absolute percentage error if you have continuous data. Change this
model.compile(loss="mean_absolute_percentage_error", optimizer="rmsprop")
to this maybe
model.compile(loss="mean_squared_error", optimizer="rmsprop")