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

4
我将建立我的第一个人工多层感知神经网络,使用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/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

我该如何训练和调整这个模型,并使代码输出最佳预测模型?我对神经网络很陌生,建立了模型后下一步该怎么做我完全不清楚。我知道我想要优化它,但我不确定应该调整哪些特征,是否需要手动调整,以及如何编写代码进行调整。
1个回答

11

您可以尝试以下操作:

  • 将损失函数从mean_squared_error更改为binary_crossentropymean_squared_error用于回归,但您要对数据进行分类。
  • fit()函数添加show_accuracy=True,这将在每个epoch输出您模型的准确率。这些信息对您来说可能比仅有损失值更有用。
  • validation_split=0.2添加到fit()函数中。目前,您仅在训练集上进行训练,并没有进行验证。在机器学习中,这是不可取的,因为您无法确定您的模型是否仅仅记住了数据集的正确答案(而并不真正理解这些答案为什么正确)。
  • 从Obama / Romney改为Democrat / Republican,并添加先前选举的数据。 ~1200个示例对于神经网络来说是相当小的数据集。还可以添加有价值信息列,如失业率或人口密度密度。请注意,许多值(如人口数量)可能类似于提供州的名称,因此例如您的网络很可能会学习到德克萨斯州代表Republican
  • 如果尚未完成,请将所有值标准化为0到1的范围(通过从每个值中减去该列的最小值,然后除以该列的(max-min)进行)。神经网络可以比未规范化的数据更好地处理规范化的数据。
  • 尝试AdamAdagrad,而不是SGD。有时它们的表现更好。(请参见有关优化器的文档。)
  • 尝试将Activation('tanh')更改为Activation('relu')、LeakyReLU、PReLUELU。Tanh很少是最佳选择。(请参见高级激活函数。)
  • 尝试增加/减少您的稠密层大小(例如,从64128)。还可以尝试添加/删除层。
  • 尝试添加BatchNormalization层(在Activation层之前)。 (参见文档。)
  • 尝试更改辍学率(例如,从0.50.25)。

  • 网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接