2017-12-15 5 views
0

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) 

Antwort

1

Ich würde empfehlen, dass Sie Ihre Parameter initialisieren, bevor Sie mit dem Training beginnen. Es ist nicht ideal, wenn alle Parameter bei Null beginnen.

Sie konnten die folgenden als Parameter an Ihre model.fit()

initializer=mx.init.Xavier(rnd_type='gaussian') 

hinzufügen Sehen Sie hier für weitere Diskussion https://mxnet.incubator.apache.org/api/python/optimization.html

Verwandte Themen