Thanks!
And sorry for the much bother. I am doing the backprop like this:
            #predict classifier outs and regressor outputs
            outputs  = resnet(images)
            routputs = regressor(rtrain_X)

            #compute loss
            loss     = clsfx_crit(outputs, labels)
            rloss    = regress_crit(routputs, rtargets)

            #backward pass
            loss.backward()
            rloss.backward(-rloss)

            # step optimizer
            clsfx_optimizer.step()
            rnn_optimizer.step()

            print ("Epoch [%d/%d], Iter [%d] cLoss: %.8f, rLoss: %.4f" %(epoch+1, maxIter, i+1,
                                                loss.data[0], rloss.data[0]))

My rloss is clearly not a tuple but the stack trace gives this error:
        rloss = Variable containing:
1.00000e+05 *
  4.8973
[torch.cuda.DoubleTensor of size 1 (GPU 0)]

    470 
    471             # step optimizer

/home/lex/anaconda2/envs/py27/lib/python2.7/site-packages/torch/autograd/variable.pyc in backward(self=Variable containing:
1.00000e+05 *
  4.8973
[torch.cuda.DoubleTensor of size 1 (GPU 0)]
, gradient=Variable containing:
1.00000e+05 *
 -4.8973
[torch.cuda.DoubleTensor of size 1 (GPU 0)]
, retain_variables=False)
    144                     'or with gradient w.r.t. the variable')
    145             gradient = self.data.new().resize_as_(self.data).fill_(1)
--> 146         self._execution_engine.run_backward((self,), (gradient,), retain_variables)
        self._execution_engine.run_backward = <built-in method run_backward of torch._C._EngineBase object at 0x7f8dd92b9210>
        self = Variable containing:
1.00000e+05 *
  4.8973
[torch.cuda.DoubleTensor of size 1 (GPU 0)]

        gradient = Variable containing:
1.00000e+05 *
 -4.8973
[torch.cuda.DoubleTensor of size 1 (GPU 0)]

        retain_variables = False
    147 
    148     def register_hook(self, hook):

RuntimeError: element 0 of gradients tuple is not a Tensor or None
> /home/lex/anaconda2/envs/py27/lib/python2.7/site-packages/torch/autograd/variable.py(146)backward()
    144                     'or with gradient w.r.t. the variable')
    145             gradient = self.data.new().resize_as_(self.data).fill_(1)
--> 146         self._execution_engine.run_backward((self,), (gradient,), retain_variables)
    147 
    148     def register_hook(self, hook):

What type of data does backward really expect?