Ich habe Probleme, ein MLP in MxNet zu lernen. Es tendiert dazu, ziemlich konstante Werte auszugeben und nur gelegentlich etwas anderes auszugeben. Ich verwende den Datensatz der Pima-Indianer, um eine binäre Klassifizierung vorzunehmen, aber egal, was ich mache (Normalisierung, Skalierung, Aktivierungen, Zielfunktionen, Anzahl der Neuronen, Chargengröße, Epochen), es würde nichts Nützliches hervorbringen.MxNet neuronale Netze lernen nicht
Das gleiche MLP in Keras funktioniert gut.
Hier ist der MxNet Code:
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)
Und das gleiche MLP in Keras:
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)