我在MxNet中学习MLP时遇到了麻烦。它倾向于输出相当恒定的值,只偶尔输出任何不同的值。我正在使用Pima Indians数据集进行二元分类,但无论我做什么(标准化,缩放,改变激活,目标函数,神经元数量,批量大小,时期),它都不会产生任何有用的东西。
Keras的MLP工作正常。
这是MxNet代码:
batch_size=10
train_iter=mx.io.NDArrayIter(mx.nd.array(df_train), mx.nd.array(y_train),
batch_size, shuffle=True)
val_iter=mx.io.NDArrayIter(mx.nd.array(df_test), mx.nd.array(y_test), batch_size)
data=mx.sym.var('data')
fc1 = mx.sym.FullyConnected(data=data, num_hidden=12)
act1 = mx.sym.Activation(data=fc1, act_type='relu')
fc2 = mx.sym.FullyConnected(data=act1, num_hidden=8)
act2 = mx.sym.Activation(data=fc2, act_type='relu')
fcfinal = mx.sym.FullyConnected(data=act2, num_hidden=2)
mlp = mx.sym.SoftmaxOutput(data=fcfinal, name='softmax')
mlp_model = mx.mod.Module(symbol=mlp, context=mx.cpu())
mlp_model.fit(train_iter,
eval_data=val_iter,
optimizer='sgd',
eval_metric='ce',
num_epoch=150)
和Keras的MLP相同:
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(df_train_res, y_train_res)
我建议您在开始培训之前初始化参数。将所有参数从零开始并不理想。
您可以将以下参数作为参数添加到model.fit()
initializer=mx.init.Xavier(rnd_type='gaussian')
有关https://mxnet.incubator.apache.org/api/python/optimization.html的更多讨论,请参见此处