维数错误。 Keras

时间:2017-08-14 19:38:51

标签: python machine-learning keras recurrent-neural-network

我在抓住网络第一层的形状输入时遇到了麻烦。这是我的架构:

    # 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个维度

2 个答案:

答案 0 :(得分:0)

由于错误表明这是一个整形问题,您提供的输入(model_input)的形状应该与您在model.fit中提供的数据的输入形状相匹配

使用以下方法重新检查您的形状:    "ajax": { "url": dataUrl, "type": "POST", "dataSrc": '' }     from keras import backend as K如果是张量的话 或者K.shape(input _tensor)如果它是一个numpy数组。 此外,如果形状不匹配(他们不会)使用该功能 K.reshape 更多帮助请参阅keras / backend API

答案 1 :(得分:0)

根据Keras documentation,Convolution1D层接受3D张量作为其输入。您需要在输入数据中提供step作为额外维度。 您可以查看此link以获取更多信息。