首页 文章

如何使用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 回答

  • 9

    你可以做的一些事情是:

    • 将损失函数从 mean_squared_error 更改为 binary_crossentropy . mean_squared_error 用于回归,但您希望对数据进行分类 .

    • show_accuracy=True 添加到 fit() 函数中,该函数在每个纪元输出模型的精度 . 这些信息对您来说可能比损失 Value 更有用 .

    • validation_split=0.2 添加到 fit() 函数中 . 目前,您只是在训练集上进行训练并且无需进行任何验证 . 那确定你的模型没有简单地记住你的数据集的正确答案(没有真正理解为什么这些答案是正确的) .

    • 从奥巴马/罗姆尼改为民主党/共和党,并增加以往选举的数据 . ~1200个例子是神经网络的一个非常小的数据集 . 还要添加包含失业率或人口密度等有 Value 信息的列 . 请注意,相当一部分值(如人口数)可能与提供州名称相似,例如,你的网可能会知道德克萨斯意味着 Republican .

    • 如果尚未执行此操作,请将所有值标准化为0到1的范围(通过从每个值中减去列的最小值,然后除以列的(最大 - 最小值)) . 神经网络可以比非标准化数据更好地处理标准化数据 .

    • 尝试 AdamAdagrad 而不是 SGD . 有时他们表现更好 . (见documentation about optimizers . )

    • 尝试 Activation('relu')LeakyReLUPReLUELU 而不是 Activation('tanh') . Tanh很少是最好的选择 . (见advanced activation functions . )

    • 尝试增加/减少密集层的大小(例如,从 64128 ) . 还可以尝试添加/删除图层 .

    • 尝试添加 BatchNormalization 图层(在 Activation 图层之前) . (见documentation . )

    • 尝试更改辍学率(例如从 0.50.25 ) .

相关问题