Hey Frank,
I changed my code in the dataloader to just give back the class index as target (With that modification the code ran through without any errors).
def __getitem__(self, idx):
        return torch.Tensor(self.samples[idx][0]), torch.Tensor([self.samples[idx][1][:-1].index(1)])

My problem now was that I am not sure how to interpret the output if I give an 180x1 input vector to the trained model. I get back the following:
learning_rate = 1e-5
tensor([ 0.0982,  0.0182,  0.0380,  0.0131, -0.1438, -0.1540, -0.1128, -0.1452,
         0.0520, -0.0235, -0.0581, -0.1654,  0.0238, -0.0367, -0.0718,  0.0265,
        -0.0240,  0.0926, -0.0354, -0.1772,  0.0667,  0.0795, -0.1556, -0.1301,
        -0.1172,  0.1152,  0.1159, -0.0975,  0.0838, -0.0328, -0.0970, -0.0034,
        -0.0415,  0.0879,  0.0251,  0.0339, -0.0162, -0.0447, -0.1247, -0.0288,
        -0.0193,  0.0407,  0.0237, -0.1138, -0.0198,  0.0213,  0.0173,  0.0107,
         0.0198,  0.0166, -0.0446, -0.1113, -0.0847, -0.1868, -0.0057, -0.0450,
        -0.1188, -0.1111, -0.0694,  0.0380], grad_fn=<AddBackward0>)

or learning rate=0.1:
tensor([20.7308, -0.3333, -0.3342, -0.3399, -0.3359, -0.3355, -0.3352, -0.3441,
        -0.3427, -0.3442, -0.3405, -0.3442, -0.3394, -0.3452, -0.3483, -0.3503,
        -0.3363, -0.3425, -0.3441, -0.3375, -0.3388, -0.3365, -0.3406, -0.3325,
        -0.3509, -0.3480, -0.3365, -0.3329, -0.3407, -0.3453, -0.3416, -0.3386,
        -0.3493, -0.3467, -0.3386, -0.3418, -0.3363, -0.3493, -0.3445, -0.3397,
        -0.3425, -0.3497, -0.3367, -0.3371, -0.3520, -0.3403, -0.3394, -0.3397,
        -0.3496, -0.3333, -0.3350, -0.3397, -0.3334, -0.3502, -0.3414, -0.3430,
        -0.3341, -0.3643, -0.3401, -0.3340], grad_fn=<AddBackward0>)

What is now the action index I should play -> Taking e.g. 21 did not work (playing moves that are not possible)
Well currently I have in my dataset the bestmove index and the q value which is the expected output value(reward) if the player plays this card.
Hm ok I could train my Classifier also on Q-Values. Now the interpretation of the 60 outputs would reflect its q value (reward if game finished) is that correct? I then would know for which action I get the best q value and I simply have to find the max. q for each of the possible actions among the 60 outputs. - Is that correct?
Referring to the constraint. Yes it is a constraint a player can only play a card it has on its hand.
I think a NN like this one would be nice ( output value is the q value):

I am not sure how to construct this model and how to train it. I will work on this one as well.