MXNET softmax输出:标签形状混乱

时间:2018-10-02 15:53:20

标签: r mxnet softmax

我对应如何塑造softmax分类器的标签还不清楚。

从我的实验中我可以理解的是,一个标量劳动者指示类概率输出的索引是一个选择,而另一个是一个2D标签,其中行是类概率或一个热编码变量,例如c(1 ,0,0)。

让我感到困惑的是:

  • 我可以使用索引之外的sclalar标签值,例如我的4 下面的示例-没有警告或错误。为什么会这样?
  • 当我的标签是负标量或具有负值的数组时, 该模型收敛到各个类别上的均匀概率分布。 例如,是否期望actor_train.y = matrix(c(0, -1,v0), ncol = 1)在softmax输出中导致相等的概率?
  • 我尝试使用softmax MXNET分类器生成策略梯度 强化学习,而我的负面奖励导致了问题 上图:均匀概率。可以吗?

    需要(mxnet)

    actor_initializer <-m​​x.init.Xavier(rnd_type =“高斯”,                               factor_type =“ avg”,                               幅度= 0.0001)

    actor_nn_data <-mx.symbol.Variable('数据')actor_nn_label <-mx.symbol.Variable('label')

    device.cpu <-mx.cpu()

    NN体系结构

    actor_fc3 <-mx.symbol.FullyConnected(      数据= actor_nn_data      ,num_hidden = 3)

    actor_output <-mx.symbol.SoftmaxOutput(      数据= actor_fc3      ,标签= actor_nn_label      ,name ='actor')

    crossentfunc <-函数(标签,前置)      {      -sum(label * log(pred))}

    actor_loss <-mx.metric.custom(           盛宴= crossentfunc           ,名称=“对数丢失”      )

    初始化NN

    actor_train.x <-矩阵(rnorm(11),nrow = 1)

    actor_train.y = 0#1#2#3#-3#矩阵(c(0,0,-1),ncol = 1)

    rm(actor_model)

    actor_model <-mx.model.FeedForward.create(      符号= actor_output,      X = actor_train.x,      y = actor_train.y,      ctx = device.cpu,      num.round = 100,      array.batch.size = 1,      优化程序='adam',      eval.metric = actor_loss,      clip_gradient = 1      wd = 0.01,      初始化程序= actor_initializer,      array.layout =“ rowmajor”)

    predict(actor_model,actor_train.x,array.layout =“ rowmajor”)

1 个答案:

答案 0 :(得分:0)

对我来说很奇怪,但是我找到了解决方法。

我将优化器从optimizer = 'adam'更改为optimizer = 'rmsprop',并且在出现负目标的情况下,NN开始按预期收敛。我使用简单的NN和optim函数在R中进行了仿真,以获得相同的结果。

诸如adamSGD的外观可能是错误的,或者在多项式分类的情况下……无论如何,我也一直陷于一个事实,即那些优化器并不能仅靠1就收敛到一个完美的解决方案。例如rmsprop可以!注意!