在keras中添加卷积层会产生错误

时间:2017-07-18 08:26:54

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

我有一个数据集,它有两个类,有400个功能。每个要素都是浮点数。我正在尝试在keras中构建一个基本的CNN,但我面临以下错误。我已经检查了其他解决方案,但这些解决方案要求将训练数据重新整形为Maximum allowed size for uploaded files. upload_max_filesize = 256M 。我不认为这是一个有效的解决方案。

我的代码和错误消息发布在下面。

(batch_size, steps, input_dim)

错误讯息:

    model = Sequential()
    model.add(Dense(200, input_dim=400, init='glorot_uniform', activation='relu'))
    model.add(Conv1D(100,
                     4,
                     padding='valid',
                     activation='relu',
                     strides=1))
    model.add(GlobalMaxPooling1D())
    model.add(Dense(50))
    model.add(Activation('relu'))
    model.add(Dense(1))
    model.add(Activation('sigmoid'))
    sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
    model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy'])
    return model

1 个答案:

答案 0 :(得分:3)

因此Conv1D需要形状(batch_size, timesteps, features)的三维输入。第一个Dense图层的输出具有形状(batch_size, 200)。如果您想将这200个功能解释为一个功能的200个步骤,您可以简单地:

model = Sequential()
model.add(Dense(200, input_dim=400, init='glorot_uniform', activation='relu'))
model.add(Reshape((200, 1))
model.add(Conv1D(100,
                 4,
                 padding='valid',
                 activation='relu',
                 strides=1))

如果您想将输入解释为时间顺序,您还可以:

model = Sequential()
model.add(Dense(200, input_shape=(400, 1), init='glorot_uniform', activation='relu'))
model.add(Conv1D(100,
                 4,
                 padding='valid',
                 activation='relu',
                 strides=1))

并重新整形输入数据以获得有效的形状。在这种情况下,您的输入将被解释为一个要素的400个步骤,而第一个Dense图层会将您的数据转换为(batch_size, 400, 200)形状,如Keras中的Dense> 2.0独立应用于时间序列的每个元素。