4

我正在使用 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

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

4

1 回答 1

10

您可以做的一些事情是:

  • 将您的损失函数从 更改mean_squared_errorbinary_crossentropymean_squared_error用于回归,但您想对数据进行分类。
  • 添加show_accuracy=True到您的fit()函数中,该函数在每个时期输出模型的准确性。该信息可能对您更有用,而不仅仅是损失值。
  • 添加validation_split=0.2到您的fit()功能。目前,您只是在训练集上进行训练,并且没有进行任何验证。这在机器学习中是不行的,因为你不能确定你的模型没有简单地记住你的数据集的正确答案(没有真正理解为什么这些答案是正确的)。
  • 从奥巴马/罗姆尼更改为民主党/共和党,并添加以前选举的数据。大约 1200 个示例是神经网络的一个非常小的数据集。还可以添加包含有价值信息的列,例如失业率或人口密度。请注意,相当多的值(如人口数)可能类似于提供州名,因此例如,您的网络可能会知道 Texas 的意思是Republican
  • 如果您还没有这样做,请将所有值标准化为 0 到 1 的范围(通过从每个值中减去列的最小值,然后除以列的 (max - min))。神经网络可以比非标准化数据更好地处理标准化数据。
  • 尝试AdamAdagrad而不是SGD. 有时他们表现更好。(请参阅有关优化器的文档。)
  • 尝试Activation('relu'), LeakyReLU,PReLUELU不是Activation('tanh'). Tanh 很少是最佳选择。(请参阅高级激活函数。)
  • 尝试增加/减少密集层的大小(例如从64128)。还可以尝试添加/删除图层。
  • 尝试添加BatchNormalization图层(在Activation图层之前)。(请参阅文档。)
  • 尝试更改辍学率(例如从0.50.25)。
于 2016-01-08T12:55:32.460 回答