我有一个数据集,它有两个类,有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
答案 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独立应用于时间序列的每个元素。