我正在尝试使用简单的神经网络来预测使用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,...]
有没有人知道这里发生了什么?