2017-02-03 1 views
0

Je suis actuellement en train d'essayer de configurer un NN de feed-forward en utilisant l'API MXNet R. Je voudrais mettre en œuvre une fonction de perte personnalisée qui utilise des poids pré-fixes définis par moi-même pour être c (7,8,9). Dans Tensorflow, il est possible de définir les variables comme non-formables, ce qui permet de s'assurer que ces variables ne sont pas modifiées pendant le processus d'apprentissage. C'est exactement ce dont j'aurais besoin pour mes poids! Malheureusement, je n'ai trouvé aucun moyen de l'implémenter. Voici mon code:Définition de variables non-formables dans MXNet

data <- mx.symbol.Variable('data') 
label <- mx.symbol.Variable('label') 
weights <- mx.symbol.Variable(name='weights') 

... [some network layers]... 

fc2 <- mx.symbol.FullyConnected(data=tanh3, num_hidden=length(predictable_errors)) 
softmax <- mx.symbol.SoftmaxActivation(data=fc2, name="softmax_activation") 
weighted_l2 <- mx.symbol.sum(mx.symbol.square(softmax - label)*weights) 
loss <- mx.symbol.MakeLoss(data=weighted_l2) 

model <- mx.model.FeedForward.create(loss, X=train.x, y=train.y, ctx=mx.cpu(), arg.params = list(weights=mx.nd.array(array(c(7,8,9), dim=c(3,1)), mx.cpu())), num.round=1, learning.rate=0.05, momentum=0.9, array.batch.size = 1, eval.metric=mx.metric.accuracy, epoch.end.callback=mx.callback.log.train.metric(1)) 

Je sais que l'API Python offre la fonction set_lr_mult, avec laquelle je pourrais mettre pour « poids » le taux d'apprentissage à zéro, mais avec R cela ne semble pas être une option. Auriez-vous des suggestions?

Merci beaucoup à l'avance!

Répondre

2

Vous pouvez le faire en utilisant Module au lieu de FeedForward, et lorsque vous utilisez le module, vous pouvez passer les paramètres fixes que vous ne voulez pas former.

model <- mx.mod.Module(loss, data_names, label_names, ctx=mx.cpu(), 
          fixed_param_names=[list of parameters you do not want to train for]) 

Vous pouvez en lire plus here

+0

Merci pour votre réponse! J'ai regardé dans l'API de modèle et il semble seulement être disponible pour Python. Alors que je suis prêt à passer en Python en l'absence d'alternatives, je voudrais d'abord explorer toutes les possibilités de l'API R. –