我正在使用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_crossentropy
.mean_squared_error
用于回归,但您想要对数据进行分类.
添加show_accuracy=True
到您的fit()
功能,在每个时期输出您的模型的准确性.这些信息对您来说可能比损失价值更有用.
添加validation_split=0.2
到您的fit()
功能.目前,您只是在训练集上进行训练并且无需进行验证.这是机器学习中的一个禁忌,因为你不能确定你的模型没有简单地记住你的数据集的正确答案(没有真正理解为什么这些答案是正确的).
从奥巴马/罗姆尼改为民主党/共和党,并增加以往选举的数据.~1200个例子是神经网络的一个非常小的数据集.还要添加包含失业率或人口密度等有价值信息的列.请注意,相当一些值(如人口数量)可能类似于提供州名称,因此例如您的网络可能会了解德克萨斯的意思Republican
.
如果尚未执行此操作,请将所有值标准化为0到1的范围(通过从每个值中减去列的最小值,然后除以列的(最大 - 最小值)).神经网络可以比非标准化数据更好地处理标准化数据.
尝试Adam
而Adagrad
不是SGD
.有时他们表现更好.(请参阅有关优化器的文档.)
尝试Activation('relu')
,LeakyReLU
,PReLU
和ELU
代替Activation('tanh')
.Tanh很少是最好的选择.(请参阅高级激活功能.)
尝试增加/减少密集层的大小(例如从)64
到128
.还可以尝试添加/删除图层.
尝试添加BatchNormalization
图层(在Activation
图层之前).(见文件.)
尝试更改辍学率(例如从0.5
to 0.25
).