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, kursun bir parçasıdır

Python ile Deep Reinforcement Learning

Kursa Göz Atın

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ı etkileşimli egzersiz

Bu egzersizi bu örnek kodu tamamlayarak deneyin.

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