Thank you.  So that extra float array was the bias!
So, doing that conversion of everything to float32, then for some reason the line
    for batch_idx, (data, target) in enumerate(trainloader):

is producing a target which is still DoubleTensor, although data is a FloatTensor.  This is a problem when it comes to compute the loss.  Is there a way to recast DoubleTensor as a FloatTensor?
(When I try  target = torch.FloatTensor(target) I get an error.)
These are loaded by converting both data and target to FloatTensor, and I even added a numpy .astype(float) call to make sure…but somehow the dataloader is generating a double.   Why might that be?
The loader is initialized via…
    trainset = torch.utils.data.TensorDataset(torch.FloatTensor(X_train),torch.FloatTensor(Y_train.astype(float)))
    trainloader = torch.utils.data.DataLoader(trainset, batch_size=20, shuffle=True, num_workers=2)