Ok… I got it… this confused me.  I got it in my head that because the targets/labels are a one dimensional tensor, that the output dimension had to be size 1, which made no sense to me at the time. (I did not have to do this in lua.)   So I set the output layer to 4 and it seems to be working.   Still trying to sort out the logsoftmax input, but I’m able to meaningfully train with crossentropyloss for now.
I appreciate your help.