Il problema potrebbe essere che la variabile requires_grad nella riga predictions = torch.autograd.Variable(predictions_tensor, requires_grad=True) viene impostata a True, il che significa che le operazioni eseguite su questa variabile devono essere tracciate per il calcolo del gradiente. Tuttavia, se il tensore predictions_tensor è stato creato senza richiedere il calcolo del gradiente, la funzione backward() non potrebbe essere applicata ad esso.
Puoi provare a impostare requires_grad=False nella riga sopra, e vedere se il problema persiste. In alternativa, puoi anche verificare se i tensore predictions_tensor e Y_tensor sono entrambi variabili torch.Tensor o se sono state convertite in oggetti numpy o altro tipo di variabili prima di passarle alla funzione.
Inoltre, se i gradienti sono sempre None, potrebbe essere utile verificare che il modello sia impostato correttamente per il calcolo del gradiente. Ad esempio, verificare che tutti i parametri del modello abbiano requires_grad=True.
def q_learning(self, num_episodes, max_steps):
for i_episode in range(num_episodes):
state = self.env.reset()
for t in range(max_steps):
self.memory.push(*self.optimize_model(*self.env.step(self.select_action(state)), state))
if self.env.done:
break
state = self.env.state