2016-02-26 84 views
3

我一直在試圖運行下面的代碼神經網絡:Python/Keras/Theano - ValueError:尺寸不匹配;形狀(98,10),(98,1)

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) 

我一直沒能找出這個錯誤的手段:

raise ValueError(base_exc_str) 
ValueError: Dimension mismatch; shapes are (98, 10), (98, 1) 

據我瞭解,形狀應該是平等的,就像(98,10), (98,10)(98,1),(98,1),這就是造成問題的原因。是對的嗎?

如果是,是否有人知道我可以在代碼或數據集中修復此問題?那10和1是什麼意思?

如果不是,任何人都可以向我解釋發生了什麼?





附加信息:

可變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]] 

可變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 

完全回溯:

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. 

回答

3

的不匹配是預期的輸出尺寸(98,10),你正在使用的數據的尺寸之間(98.1)

也就是說因爲您正在使用應該在10類數據庫上進行分類的示例代碼。如果你想要做預測,然後你的最後一層改爲

model.add(Dense(output_dim=1, init="glorot_uniform")) 

另外,我認爲你將與你的成本函數的問題。如果你有連續的數據,你不應該使用絕對百分比錯誤。改變這種

model.compile(loss="mean_absolute_percentage_error", optimizer="rmsprop") 

這也許

model.compile(loss="mean_squared_error", optimizer="rmsprop")