2017-08-14 65 views
0

我有麻煩抓住形狀輸入到網絡的第一層。這是我的架構:錯誤的維數。 Keras

# Model Hyperparameters 
    filter_sizes = [1, 2, 3, 4, 5] 
    num_filters = 10 
    dropout_prob = [0.5, 0.8] 
    hidden_dims = 50 

    model_input = Input(shape=(X.shape[0], X.shape[1])) 
    z = model_input 
    z = Dropout(0.5)(z) 

    # Convolutional block 
    conv_blocks = [] 
    for fz in filter_sizes: 
     conv = Convolution1D(filters=num_filters, 
          kernel_size=fz, 
          padding="valid", 
          activation="relu", 
          strides=1)(z) 
     conv = MaxPooling1D(pool_size=2)(conv) 
     conv = Flatten()(conv) 
     conv_blocks.append(conv) 

    z = Concatenate()(conv_blocks) if len(conv_blocks) > 1 else conv_blocks[0] 

    z = Dropout(dropout_prob[1])(z) 
    z = Dense(hidden_dims, activation="relu")(z) 
    model_output = Dense(3, activation="softmax")(z) 

    model = Model(model_input, model_output) 
    model.fit(X[train], to_categorical(y[train], num_classes=3)) 



ValueError: Error when checking input: expected input_1 to have 3 dimensions, but got array with shape (12547, 261) 

這是我的數據看起來像:

array([[ 1, 2, 3, ..., 0, 0, 0], 
     [ 5, 6, 7, ..., 0, 0, 0], 
     [15, 10, 4, ..., 0, 0, 0], 
     ..., 
     [ 5, 6, 8, ..., 0, 0, 0], 
     [11, 10, 14, ..., 0, 0, 0], 
     [14, 8, 8, ..., 0, 0, 0]]) 

我有14640個樣品261點的尺寸

回答

0

由於錯誤說,這是一個整形的問題輸入的形狀(model_input)應與您在model.fit中輸入的數據的輸入形狀匹配。fit

重新檢查您的形狀使用: from keras import backend as K K.shape(input _tensor)如果它是張量 或np.shape()如果它是一個numpy數組。 此外,如果形狀不匹配(以後也不會)使用功能 K.reshape 富勒更幫忙看看keras /後端API

0

據Keras documentation,Convolution1D層接受三維張量作爲其輸入。您需要在輸入數據中提供step作爲額外維度。 您可以查看此link以獲取更多信息。