如何使用Keras训练和调整人工多层感知器神经网络?

我正在使用Keras构建我的第一个多层感知器神经网络。

这是我的输入数据:

enter image description here

这是我用来构建初始模型的代码,基本上是遵循Keras的示例代码:

model = Sequential()model.add(Dense(64, input_dim=14, init='uniform'))model.add(Activation('tanh'))model.add(Dropout(0.5))model.add(Dense(64, init='uniform'))model.add(Activation('tanh'))model.add(Dropout(0.5))model.add(Dense(2, init='uniform'))model.add(Activation('softmax'))sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)model.compile(loss='mean_squared_error', optimizer=sgd)model.fit(X_train, y_train, nb_epoch=20, batch_size=16)

输出:

Epoch 1/201213/1213 [==============================] - 0s - loss: 0.1760     Epoch 2/201213/1213 [==============================] - 0s - loss: 0.1840     Epoch 3/201213/1213 [==============================] - 0s - loss: 0.1816     Epoch 4/201213/1213 [==============================] - 0s - loss: 0.1915     Epoch 5/201213/1213 [==============================] - 0s - loss: 0.1928     Epoch 6/201213/1213 [==============================] - 0s - loss: 0.1964     Epoch 7/201213/1213 [==============================] - 0s - loss: 0.1948     Epoch 8/201213/1213 [==============================] - 0s - loss: 0.1971     Epoch 9/201213/1213 [==============================] - 0s - loss: 0.1899     Epoch 10/201213/1213 [==============================] - 0s - loss: 0.1957     Epoch 11/201213/1213 [==============================] - 0s - loss: 0.1923     Epoch 12/201213/1213 [==============================] - 0s - loss: 0.1910     Epoch 13/201213/1213 [==============================] - 0s - loss: 0.2104     Epoch 14/201213/1213 [==============================] - 0s - loss: 0.1976     Epoch 15/201213/1213 [==============================] - 0s - loss: 0.1979     Epoch 16/201213/1213 [==============================] - 0s - loss: 0.2036     Epoch 17/201213/1213 [==============================] - 0s - loss: 0.2019     Epoch 18/201213/1213 [==============================] - 0s - loss: 0.1978     Epoch 19/201213/1213 [==============================] - 0s - loss: 0.1954     Epoch 20/201213/1213 [==============================] - 0s - loss: 0.1949

如何训练和调整这个模型,并使我的代码输出最佳预测模型?我对神经网络是新手,对构建模型后的下一步感到非常困惑。我知道我想优化它,但我不确定应该调整哪些特征,或者是否应该手动进行,或者如何编写代码来实现这一点。


回答:

你可以尝试以下几种方法:

  • 将损失函数从mean_squared_error改为binary_crossentropy。前者适用于回归问题,而你需要对数据进行分类。
  • fit()函数中添加show_accuracy=True,这样可以输出每个epoch的模型准确率。这些信息可能比单纯的损失值对你更有用。
  • fit()函数中添加validation_split=0.2。目前你只在训练集上进行训练,没有进行验证。在机器学习中,这是不行的,因为你无法确定模型是否只是记住了数据集的正确答案(而不是真正理解这些答案为什么是正确的)。
  • 将Obama/Romney改为Democrat/Republican,并添加之前选举的数据。大约1200个样本对于神经网络来说是一个相当小的数据集。还可以添加有价值的信息列,如失业率或人口密度。请注意,某些值(如人口数量)可能与提供州名相似,因此例如,你的网络可能会学到Texas意味着Republican
  • 如果你还没有这样做,将所有值标准化到0到1的范围内(通过从每个值中减去列的最小值,然后除以列的(最大值 – 最小值))。神经网络处理标准化数据的能力比处理未标准化数据要好。
  • 尝试使用AdamAdagrad代替SGD。有时候它们表现得更好。(参见优化器文档。)
  • 尝试使用Activation('relu')LeakyReLUPReLUELU代替Activation('tanh')。Tanh很少是最佳选择。(参见高级激活函数。)
  • 尝试增加/减少你的密集层大小(例如,从64改为128)。还可以尝试添加/删除层。
  • 尝试添加BatchNormalization层(在Activation层之前)。(参见文档。)
  • 尝试更改dropout率(例如,从0.5改为0.25)。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注