2017-04-10 91 views
0

我有以下错误的语句...ValueError异常:错误检查时模型的目标:预计activation_2有形状(无,761,1),但得到阵列形状(1,779,1)

ValueError: Error when checking model target: expected activation_2 to have shape (None, 761, 1) but got array with shape (1, 779, 1) 

出现错误时,我不知道761是什么意思,我的data1的形状是779 * 80,我的data3的形状是779 * 1。感谢您的帮助!

from __future__ import print_function 
from keras.preprocessing.image import ImageDataGenerator 
from keras.models import Sequential 

from keras.layers import Dense, \ 
         Dropout, \ 
         Activation, \ 
         Flatten 

from keras.layers import Convolution1D, \ 
         MaxPooling2D, \ 
         Convolution2D 

from keras.utils import np_utils 

import scipy.io as sio 
import numpy as np 

matfn = 'LIVE_data.mat' 

data = sio.loadmat(matfn) 
data0 = data['data'] 
data1 = np.ones((1, 779, 80)) 
data1[0, :, :] = data0 
data00 = data['label'] 
data2 = np.ones((1,779,1)) 
data2[0, :, :] = data00 
data000 = data['ref_ind_live'] 
data3 = np.ones((1, 779, 1)) 
data3[0, :, :] = data000 
batch_size = 64 
nb_classes = 30 
nb_epoch = 50 

X_train = data1 
y_train = data3 
X_test = data1[0, :] 
y_test = data3[0, :] 

X_train = X_train.astype('double') 
X_test = X_test.astype('double') 
X_train /= 255 
X_test /= 255 

# Convert class vectors to binary class matrices. 
Y_train = np_utils.to_categorical(y_train, nb_classes) 
Y_test = np_utils.to_categorical(y_test, nb_classes) 

model = Sequential() 

model.add(Convolution1D(32, \ 
         10, \ 
         border_mode = 'same', \ 
         input_shape = (779, \ 
             80))) 
model.add(Activation('relu')) 
model.add(Convolution1D(64, \ 
         10, \ 
         activation='relu')) 
model.add(Dropout(0.25)) 
model.add(Convolution1D(128, \ 
         10, \ 
         activation='relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(1)) 
model.add(Activation('softmax')) 

# Let's train the model using RMSprop 
model.compile(loss = 'categorical_crossentropy', \ 
       optimizer = 'rmsprop', \ 
       metrics=['accuracy']) 

print("start train") 

model.fit(X_train, \ 
      Y_train, \ 
      batch_size = batch_size, \ 
      nb_epoch = nb_epoch, \ 
      shuffle = True) 

print("end") 

score = model.evaluate(X_test, \ 
         Y_test, \ 
         batch_size = 32) 

print('Test score:', \ 
     score[0]) 
print('Test accuracy:', \ 
     score[1]) 
+0

我已经修改了你的布局,使其更容易调试。你的旧布局是好的,但不一致的应用。另外,你的价值观,经营者等常常被混淆在一起。这并不是最佳选择,因为不分离的元素可能会让某些人阅读您的代码,特别是如果他们不熟悉您的布局风格或某些使用的技术,有时甚至是他们时。要做到这一点,你应该像我用'data1 = np.ones((1,779,80))'和下面的25行一样分开它们,或者如我已经完成的其余代码一样。 – toonice

+0

有关如何在Python中执行间距的更多信息,请参阅http://stackoverflow.com/questions/9714161/spaces-in-python-coding-style和http://stackoverflow.com/questions/4172448/is-it - 可能致断-A-长的线路到多线式-蟒。 – toonice

回答

0

你的模型输出形状是(779, 1)和相同的形状在最终层预期,但由于2卷积运算的是减少到761.因此,通过在其它2卷积层加入border_mode = 'same'会解决这个问题。

可以在模型汇总检查:


层(类型)输出形状帕拉姆#

conv1d_1(Conv1D)(无,779,32)25632


activation_1 (激活)(无,779,32)0


conv1d_2(Conv1D)(无,770,64)20544


dropout_1(降)(无,770,64)0


conv1d_3(Conv1D)(无,761,128 )82048


dropout_2(降)(无,761,128)0


dense_13(密集)(无,761,1)129


activation_2(激活)(无,761,1)0

相关问题