【发布时间】:2015-10-22 16:21:00
【问题描述】:
我写了一个简单的神经网络/MLP,我得到了一些奇怪的准确度值,想仔细检查一下。
这是我的预期设置:包含 913 个样本和 192 个特征 (913,192) 的特征矩阵。我正在对 2 个结果进行分类,因此我的标签是二进制的并且具有形状 (913,1)。 1 个具有 100 个单位的隐藏层(目前)。所有激活将使用 tanh,所有损失使用 l2 正则化,并使用 SGD 进行优化
代码如下。它是使用 Keras 框架 (http://keras.io/) 在 python 中编写的,但我的问题并非特定于 Keras
input_size = 192
hidden_size = 100
output_size = 1
lambda_reg = 0.01
learning_rate = 0.01
num_epochs = 100
batch_size = 10
model = Sequential()
model.add(Dense(input_size, hidden_size, W_regularizer=l2(lambda_reg), init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(hidden_size, output_size, W_regularizer=l2(lambda_reg), init='uniform'))
model.add(Activation('tanh'))
sgd = SGD(lr=learning_rate, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd, class_mode="binary")
history = History()
model.fit(features_all, labels_all, batch_size=batch_size, nb_epoch=num_epochs, show_accuracy=True, verbose=2, validation_split=0.2, callbacks=[history])
score = model.evaluate(features_all, labels_all, show_accuracy=True, verbose=1)
我有两个问题:
这是我第一次使用 Keras,所以我想仔细检查我编写的代码在我选择的参数及其值等方面是否真的正确。
使用上面的代码,我得到的训练和测试集准确率徘徊在 50-60% 左右。也许我只是使用了不好的功能,但我想测试一下可能出了什么问题,所以我手动将所有标签和功能设置为应该可以预测的东西:
labels_all[:500] = 1
labels_all[500:] = 0
features_all[:500] = np.ones(192)*500
features_all[500:] = np.ones(192)
所以我将前 500 个样本的标签设置为 1,其他所有样本都标记为 0。我将前 500 个样本中的每一个的所有特征手动设置为 500,以及所有其他特征(对于其余样本) 得到一个 1
运行此程序时,我的训练准确率约为 65%,验证准确率约为 0%。我期望两种精度都非常高/几乎完美 - 这是不正确的吗?我的想法是具有极高值的特征都具有相同的标签(1),而具有低值的特征得到0标签
我只是想知道我的代码/模型是否不正确,或者我的逻辑是否错误
谢谢!
【问题讨论】:
标签: python machine-learning neural-network