2016-07-14 25 views
2

我有以下简单的数据集。它由9个特征组成,它是一个二元分类问题。下面显示了一个特征向量的例子。每行有其相应的0,1标签。Keras建立一个网络9维特征向量

30,82,1,2.73,172,117,2,2,655.94 
30,174,1,5.8,256,189,3,2,587.28 
98.99,84,2,0.84,577,367,3,2,1237.34 
30,28,1,0.93,38,35,2,1,112.35 
... 

我知道CNN被广泛用于图像分类,但我试图将它应用于我手头的数据集。我试图应用5个大小为2的滤镜。我一直坚持让网络以正确的方式构建给定数据的形状。这是我建立网络的功能。

def make_network(num_features,nb_classes): 
    model = Sequential() 
    model.add(Convolution1D(5,2,border_mode='same',input_shape=(1,num_features))) 
    model.add(Activation('relu')) 
    model.add(Convolution1D(5,2,border_mode='same')) 
    model.add(Activation('relu')) 
    model.add(Flatten()) 
    model.add(Dense(2)) 
    model.add(Activation('softmax')) 

我还将最终调用测试函数来测试我创建的模型的准确性。下面的函数试图实现这一

def train_model(model, X_train, Y_train, X_test, Y_test): 

    sgd = SGD(lr=0.01, decay=1e-6, momentum=0.3, nesterov=True) 
    model.compile(loss='binary_crossentropy', optimizer=sgd) 
    model.fit(X_train, Y_train, nb_epoch=100, batch_size=10, 
       validation_split=0.1, verbose=1) 

    print('Testing...') 
    res = model.evaluate(X_test, Y_test, 
         batch_size=batch_size, verbose=1, show_accuracy=True) 
    print('Test accuracy: {0}'.format(res[1])) 

当我做了模型,并通过其培训功能,我收到以下错误

Using Theano backend. 
Traceback (most recent call last): 
    File "./cnn.py", line 69, in <module> 
    train_model(model,x_train,y_train,x_test,y_test) 
    File "./cnn.py", line 19, in train_model 
    validation_split=0.1, verbose=1) 
    File "/usr/local/lib/python2.7/dist-packages/keras/models.py", line 413, in fit 
    sample_weight=sample_weight) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1011, in fit 
    batch_size=batch_size) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 938, in _standardize_user_data 
    exception_prefix='model input') 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 96, in standardize_input_data 
    str(array.shape)) 
Exception: Error when checking model input: expected convolution1d_input_1 to have 3:(None, 1, 9) dimensions, but got array with shape (4604, 9) 

我是新来Keras。我试图修改here的代码。任何帮助或指针将不胜感激。提前致谢。

+0

重塑从X_train输入(4604,9)〜(4604,1,9) – y300

回答

1

您的代码model.add(Convolution1D(5,2,border_mode='same',input_shape=(1,num_features)))定义输入形状应为(batch_size, 1, num_features)。然而,X_train以及X_test可能在形状(batch_size, 9),这是不一致的。

def train_model(model, X_train, Y_train, X_test, Y_test): 
    X_train = X_train.reshape(-1, 1, 9) 
    X_test = X_test.reshape(-1, 1, 9) 

    .... 
+0

感谢。这确实奏效。我只希望有更多关于数据形成的例子。 – broccoli