loss explosion after slight overfit
/**linear regression*/
object lrTest {
import botkop.numsca.Tensor
import scorch.autograd.Variable
import scorch.supervised.Linear
import scorch.optim.{Adam, SGD}
import botkop.{numsca => ns}
val f1: Tensor => Tensor = { t: Tensor =>
t * 3 + 1.0
}
def run = {
val fc1 = Linear(1, 1) // an affine operation: y = Wx + b
val optimizer = SGD(fc1.parameters, lr = 0.001)
//todo bug! overfit to inf
(1 to 1000) foreach { i =>
val x = ns.array(i)
val vx = Variable(x)
val y = Variable(f1(x))
val ypred = fc1(vx)
val loss = scorch.mean((ypred - y) ** 2)
println(s"loss: ${loss.data}, x: $x, y: ${y.data}, ypred: ${ypred.data}")
optimizer.zeroGrad()
loss.backward()
optimizer.step()
}
}
}
after convergence,it gives : ` loss: 0.00, x: 42.00, y: 127.00, ypred: 127.00 loss: 0.00, x: 43.00, y: 130.00, ypred: 130.02 loss: 0.00, x: 44.00, y: 133.00, ypred: 132.98 loss: 0.01, x: 45.00, y: 136.00, ypred: 136.09 loss: 0.06, x: 46.00, y: 139.00, ypred: 138.75 loss: 0.69, x: 47.00, y: 142.00, ypred: 142.83 loss: 8.30, x: 48.00, y: 145.00, ypred: 142.12 loss: 113.17, x: 49.00, y: 148.00, ypred: 158.64 loss: 1,703.49, x: 50.00, y: 151.00, ypred: 109.73 loss: 28,391.16, x: 51.00, y: 154.00, ypred: 322.50 loss: 521,611.12, x: 52.00, y: 157.00, ypred: -565.23 loss: 10,538,231.00, x: 53.00, y: 160.00, ypred: 3,406.26 loss: 233,496,688.00, x: 54.00, y: 163.00, ypred: -15,117.60 loss: 5,660,134,912.00, x: 55.00, y: 166.00, ypred: 75,399.87 loss: 149,761,097,728.00, x: 56.00, y: 169.00, ypred: -386,820.78
`