anchor.diff:  
   (**
   We use a learning rate of $0.1$.
  +This high learning rate is feasible because we will calculate the gradient on the whole dataset (50 000 images) and thus it will be very stable.
  +If we did [mini-batch training](http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf) instead, i.e. split the training set into small mini-batches and update the parameters after estimating the gradient on a mini-batch, we would have to use a smaller learning rate.
   *)
   
   (**
  
positive.code: There are wrappers `arg1`, `arg3`, `arg4`, ... for different number of arguments.
  The return type of a compiled function is always a tensor.
  If the result of the expression is a scalar (as in our case), the tensor will have rank zero.
  
  Testing the model
  -----------------
  
negative.code:         printfn "Test loss after %5d iterations: %.4f" itr l
  
  (**
  We train for 1000 iterations using the whole dataset (50 000 images) in each iteration.
  The loss is evaluated every 50 iterations on the test set (10 000 images) and printed.
  
  This should produce output similar to
      
  