NN精度在Keras的第一个时代之后饱和

时间:2016-07-28 19:30:53

标签: python neural-network keras

我正在尝试使用简单的神经网络来预测使用keras-1.0.6的二进制目标。输出在第一个时代之后饱和。我尝试使用学习率(从0.1到1e-6),SGD优化器的衰减和动量以及层(10-512个隐藏神经元和1-2个隐藏层)以及它们的网络激活功能,但是没有用 - 预测准确性是一样的。

我的训练集有形状(13602,115),我的验证集有形状(3400,115)。目标变量y_train和y_test具有编码为1和0的值(60%是1并且40%是0)。起初,数据没有标准化,但是当我将其标准化时,我得到了相同的结果。

验证输出,我看到模型只预测了1个类。有时它只预测1和其他时间只有0(当我调整模型时)。

我还试图在形状(n_sample,2)中编码目标变量,但输出是相同的。

我在这里跟踪了一些问题,谷歌搜索表明调整了学习率并且没有使用'softmax'激活但是无法改善结果。

我尝试的一些模型如下:

最简单的模型:

model.add(Dense(1, input_dim=X_train.shape[1], activation='sigmoid'))

模型2:

model = Sequential()
model.add(Dense(512, input_dim=X_train.shape[1]))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))
model.add(Dense(1))
model.add(Activation('sigmoid'))

模型3

model.add(Dense(64, input_dim=X_train.shape[1], init='uniform', activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

模型4

model.add(Dense(64, input_dim=X_train.shape[1], init='uniform', activation='sigmoid'))
model.add(Dense(1, input_dim=X_train.shape[1], activation='sigmoid'))

并编译和拟合模型:

sgd = SGD(lr=0.01, decay=0.1, momentum=0.0, nesterov=True)
model.compile(optimizer=sgd, loss='binary_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train2, nb_epoch=5, batch_size=50, validation_split=0.2)
model.predict(X_test)

输出给出[0,0,0,0,0,0,0,...]或[1,1,1,1,1,1,1,1,...]

有没有人知道这里发生了什么?

0 个答案:

没有答案