BaşlayınÜcretsiz Başlayın

PER arabelleğinden örnekleme

Aracını eğitmek için Öncelikli Deneyim Arabelleği (Prioritized Experience Buffer) sınıfını kullanmadan önce .sample() yöntemini hâlâ uygulaman gerekiyor. Bu yöntem, çekmek istediğin örneğin boyutunu argüman olarak alır ve örneklenen geçişleri tensor olarak, bellek arabelleğindeki indeksleri ve önem ağırlıklarıyla birlikte döndürür.

Ortamında kapasitesi 10 olan bir arabellek, örnekleme yapabilmen için önceden yüklendi.

Bu egzersiz

Python ile Deep Reinforcement Learning

kursunun bir parçasıdır
Kursu Görüntüle

Egzersiz talimatları

  • Her bir geçişle ilişkili örnekleme olasılığını hesapla.
  • Örnekteki geçişlere karşılık gelen indeksleri çek; np.random.choice(a, s, p=p), olasılık dizisi p'ye göre a dizisinden, yerine koymalı olarak boyutu s olan bir örnek alır.
  • Her bir geçişle ilişkili önem ağırlığını hesapla.

Uygulamalı interaktif egzersiz

Bu örnek kodu tamamlayarak bu egzersizi bitirin.

def sample(self, batch_size):
    priorities = np.array(self.priorities)
    # Calculate the sampling probabilities
    probabilities = ____ / np.sum(____)
    # Draw the indices for the sample
    indices = np.random.choice(____)
    # Calculate the importance weights
    weights = (1 / (len(self.memory) * ____)) ** ____
    weights /= np.max(weights)
    states, actions, rewards, next_states, dones = zip(*[self.memory[idx] for idx in indices])
    weights = [weights[idx] for idx in indices]
    states_tensor = torch.tensor(states, dtype=torch.float32)
    rewards_tensor = torch.tensor(rewards, dtype=torch.float32)
    next_states_tensor = torch.tensor(next_states, dtype=torch.float32)
    dones_tensor = torch.tensor(dones, dtype=torch.float32)
    weights_tensor = torch.tensor(weights, dtype=torch.float32)
    actions_tensor = torch.tensor(actions, dtype=torch.long).unsqueeze(1)
    return (states_tensor, actions_tensor, rewards_tensor, next_states_tensor,
            dones_tensor, indices, weights_tensor)

PrioritizedReplayBuffer.sample = sample
print("Sampled transitions:\n", buffer.sample(3))
Kodu Düzenle ve Çalıştır