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

How to train and tune an artificial multilayer perceptron neural network using Keras?

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

这是我的输入数据:

这是我用来构建初始模型的代码,它基本上遵循 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/20
1213/1213 [==============================] - 0s - loss: 0.1760     
Epoch 2/20
1213/1213 [==============================] - 0s - loss: 0.1840     
Epoch 3/20
1213/1213 [==============================] - 0s - loss: 0.1816     
Epoch 4/20
1213/1213 [==============================] - 0s - loss: 0.1915     
Epoch 5/20
1213/1213 [==============================] - 0s - loss: 0.1928     
Epoch 6/20
1213/1213 [==============================] - 0s - loss: 0.1964     
Epoch 7/20
1213/1213 [==============================] - 0s - loss: 0.1948     
Epoch 8/20
1213/1213 [==============================] - 0s - loss: 0.1971     
Epoch 9/20
1213/1213 [==============================] - 0s - loss: 0.1899     
Epoch 10/20
1213/1213 [==============================] - 0s - loss: 0.1957     
Epoch 11/20
1213/1213 [==============================] - 0s - loss: 0.1923     
Epoch 12/20
1213/1213 [==============================] - 0s - loss: 0.1910     
Epoch 13/20
1213/1213 [==============================] - 0s - loss: 0.2104     
Epoch 14/20
1213/1213 [==============================] - 0s - loss: 0.1976     
Epoch 15/20
1213/1213 [==============================] - 0s - loss: 0.1979     
Epoch 16/20
1213/1213 [==============================] - 0s - loss: 0.2036     
Epoch 17/20
1213/1213 [==============================] - 0s - loss: 0.2019     
Epoch 18/20
1213/1213 [==============================] - 0s - loss: 0.1978     
Epoch 19/20
1213/1213 [==============================] - 0s - loss: 0.1954     
Epoch 20/20
1213/1213 [==============================] - 0s - loss: 0.1949

如何训练和调整此模型并让我的代码输出我的最佳预测模型?我是神经网络的新手,完全不知道构建模型后的下一步是什么。我知道我想优化它,但我不确定要调整哪些功能,或者我是否应该手动执行或如何编写代码来执行此操作。

您可以做的一些事情是:

  • 将损失函数从 mean_squared_error 更改为 binary_crossentropymean_squared_error 用于回归,但您想对数据进行分类。
  • show_accuracy=True 添加到您的 fit() 函数,它会在每个时期输出您的模型的准确性。该信息可能比损失值对您更有用。
  • validation_split=0.2 添加到您的 fit() 函数中。目前,您只在训练集上进行训练,什么都不做验证。这是机器学习中的一个 no-go,因为您不能确定您的模型没有简单地记住数据集的正确答案(没有真正理解为什么这些答案是正确的)。
  • 从 Obama/Romney 更改为 Democrat/Republican 并添加以前选举的数据。 ~1200 个示例对于神经网络来说是一个非常小的数据集。还要添加包含有价值信息的列,例如失业率或人口 密度。请注意,相当多的值(如人口数量)可能类似于提供州名,例如您的网络可能会了解到 Texas 的意思是 Republican.
  • 如果您还没有这样做,请将所有值归一化到 0 到 1 的范围内(通过从每个值中减去列的最小值,然后除以列的(最大值 - 最小值)) .神经网络可以比非规范化数据更好地处理规范化数据。
  • 尝试 AdamAdagrad 而不是 SGD。有时他们表现得更好。 (参见 documentation about optimizers。)
  • 尝试 Activation('relu')LeakyReLUPReLUELU 而不是 Activation('tanh')。 Tanh 很少是最佳选择。 (参见 advanced activation functions。)
  • 尝试 increasing/decreasing 密集层大小(例如从 64128)。也可以尝试 adding/removing 层。
  • 尝试添加 BatchNormalization 层(在 Activation 层之前)。 (参见 documentation。)
  • 尝试改变辍学率(例如从 0.50.25)。