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ırEgzersiz 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 dizisip'ye göreadizisinden, yerine koymalı olarak boyutusolan 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))