我对应如何塑造softmax分类器的标签还不清楚。
从我的实验中我可以理解的是,一个标量劳动者指示类概率输出的索引是一个选择,而另一个是一个2D标签,其中行是类概率或一个热编码变量,例如c(1 ,0,0)。
让我感到困惑的是:
actor_train.y = matrix(c(0, -1,v0), ncol = 1)
在softmax输出中导致相等的概率?我尝试使用softmax MXNET分类器生成策略梯度 强化学习,而我的负面奖励导致了问题 上图:均匀概率。可以吗?
需要(mxnet)
actor_initializer <-mx.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()
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 ,名称=“对数丢失” )
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”)
答案 0 :(得分:0)
对我来说很奇怪,但是我找到了解决方法。
我将优化器从optimizer = 'adam'
更改为optimizer = 'rmsprop'
,并且在出现负目标的情况下,NN开始按预期收敛。我使用简单的NN和optim
函数在R中进行了仿真,以获得相同的结果。
诸如adam
或SGD
的外观可能是错误的,或者在多项式分类的情况下……无论如何,我也一直陷于一个事实,即那些优化器并不能仅靠1就收敛到一个完美的解决方案。例如rmsprop
可以!注意!