Neural network #火炬输出的二元逻辑回归没有变化
torch中的逻辑回归有问题。 当我使用二元逻辑回归来训练模型时,输出保持不变,如下所示:Neural network #火炬输出的二元逻辑回归没有变化,neural-network,deep-learning,torch,Neural Network,Deep Learning,Torch,torch中的逻辑回归有问题。 当我使用二元逻辑回归来训练模型时,输出保持不变,如下所示: linLayer = nn.Linear(3,1) sigmoid=nn.Sigmoid() model = nn.Sequential() model:add(linLayer) model:add(sigmoid) criterion = nn.BCECriterion() 用optim方法 for i = 1,epochs do current_loss = 0 for i = 1,(#
linLayer = nn.Linear(3,1)
sigmoid=nn.Sigmoid()
model = nn.Sequential()
model:add(linLayer)
model:add(sigmoid)
criterion = nn.BCECriterion()
用optim方法
for i = 1,epochs do
current_loss = 0
for i = 1,(#dataset_inputs)[1] do
_,fs = optim.sgd(feval,x,sgd_params)
current_loss = current_loss + fs[1]
end
current_loss = current_loss / (#dataset_inputs)[1]
print('epoch = ' .. i ..
' of ' .. epochs ..
' current loss = ' .. current_loss)
end
新加坡元参数为:
sgd_params = {
learningRate = 1e-6,
learningRateDecay = 1e-4,
weightDecay = 0,
momentum = 0
}
它看起来像:
epoch = 1 of 2000 current loss = 8.7728492043066
epoch = 2 of 2000 current loss = 8.7728492043066
epoch = 3 of 2000 current loss = 8.7728492043066
epoch = 4 of 2000 current loss = 8.7728492043066
epoch = 5 of 2000 current loss = 8.7728492043066
epoch = 6 of 2000 current loss = 8.7728492043066
epoch = 7 of 2000 current loss = 8.7728492043066
。。。。。。
模型的输出为:
0
0
0
0
0
0
.
.
.
有时是:
1
1
1
.
.
.
如果我改变学习率或学习率衰减,它根本不起作用。我对这个问题一无所知。你们知道这里怎么了吗
这是我的feval函数
feval = function(x_new)
if x ~= x_new then
x:copy(x_new)
end
_nidx_ = (_nidx_ or 0) + 1
if _nidx_ > (#dataset_inputs)[1] then _nidx_ = 1 end
local sample = dataset[_nidx_]
local inputs = sample[{ {2,4} }]
local target = sample[{ {1} }]
dl_dx:zero()
local loss_x = criterion:forward(model:forward(inputs),target)
model:backward(inputs, criterion:backward(model.output,target))
-- return loss(x) and dloss/dx
return loss_x, dl_dx
end
我们可以看看你的
feval
函数吗?@AlexanderLutsenko我现在已经提到了。谢谢。我修改了一些东西。模型:代码中将添加(nn.MulConstant(0.01))。在改变之后,它现在确实起作用了。我认为输入范围可能太大,无法获得准确答案。我们可以看看您的feval
函数吗?@AlexanderLutsenko我现在已经提到了。谢谢。我修改了一些东西。模型:代码中将添加(nn.MulConstant(0.01))。在改变之后,它现在确实起作用了。我认为输入范围可能太大,无法获得准确答案。