繁体   English   中英

Keras model 生产相同的 output

[英]Keras model producing same output

我见过几个有类似问题的问题,但没有一个能解决我的问题。 我正在尝试将 Keras 中的神经网络拟合到具有 22 个输入特征的数据集以进行二进制分类。 问题是我只有 195 个训练样本。 我知道这是一个小数据集,但我不知道是否可以以合理的精度拟合 model(我的目标是> 95%的精度)。 我遇到的问题是我的 model 仅输出 1 并获得 75% 的准确度,因为我的数据集是 75% 的正例。 这是我的代码:

data = pd.read_csv("") #filename omitted, but it loads properly
scaler = MinMaxScaler()
X = scaler.fit_transform(X)
Y = data['status']
X = data.drop(['status', 'name'], axis = 1)
xTrain, xTest, yTrain, yTest = train_test_split(X, Y, train_size = 0.8)
model = Sequential()
model.add(Dense(48, input_shape=(22,), activation = 'relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation = 'softmax'))
optim = keras.optimizers.adam(lr=0.0001)
model.compile(optimizer = optim, loss = 'binary_crossentropy', metrics = ['accuracy'])
model.fit(xTrain, yTrain, epochs = 20, batch_size = 5, validation_data = (xTest, yTest))

我尝试添加更多隐藏层,增加训练 epoch 的数量,并增加和降低优化器的学习率,但准确性保持不变。 这是数据集的链接: https://www.dropbox.com/s/c4td650b4z7aizc/fixed.xlsx?dl=0

您需要尝试一些事情以获得更好的准确性:

  1. 不要简单地将数据集原样输入到 NN 中。 做一些数据准备,比如平衡响应 class。 请查看各种采样技术,例如欠采样、过采样、SMOTE 等。如果您的数据集具有平衡的 class 分布,则可以很好地提高准确性。

  2. 而不是activation = 'softmax' ,您应该使用sigmoid激活 function。

除了这些,您应该尝试其他几种架构,lr 值,不。 epochs、batch_size、优化器等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM