Rumah >Peranti teknologi >AI >Bermula dengan Torchrl untuk pembelajaran tetulang yang mendalam
Torchrl, perpustakaan sumber terbuka, memudahkan pembangunan RL dengan pytorch. Tutorial ini menunjukkan persediaan TorchRL, komponen teras, dan membina ejen RL asas. Kami akan meneroka algoritma pra-dibina seperti pengoptimuman dasar proksimal (PPO), dan teknik pemantauan dan pemantauan penting.
Menyediakan Torchrl
Prasyarat
!pip install torch tensordict gymnasium==0.29.1 pygameMemasang Torchrl
!pip install torchrlPengesahan
dalam shell python atau notebook. Gunakan torchrl
untuk mengesahkan keserasian persekitaran (mis., Cartpole): check_env_specs()
import torchrl from torchrl.envs import GymEnv from torchrl.envs.utils import check_env_specs check_env_specs(GymEnv("CartPole-v1"))Pemasangan pemasangan yang berjaya:
<code>[torchrl][INFO] check_env_specs succeeded!</code>Komponen TorchRL Utama
Persekitaran
: GymEnv
env = GymEnv("CartPole-v1")Transforms
: TransformedEnv
from torchrl.envs import GymEnv, StepCounter, TransformedEnv env = TransformedEnv(GymEnv("CartPole-v1"), StepCounter())normalisasi dicapai dengan
: ObservationNorm
from torchrl.envs import Compose base_env = GymEnv('CartPole-v1', device=device) env = TransformedEnv( base_env, Compose( ObservationNorm(in_keys=["observation"]), StepCounter() ) )pelbagai transformasi digabungkan menggunakan
. Compose
Dasar rawak mudah dibuat menggunakan
: RandomPolicy
!pip install torch tensordict gymnasium==0.29.1 pygame
Bahagian ini menunjukkan membina ejen RL yang mudah.
Import Pakej yang diperlukan:
!pip install torchrl
Kami akan menggunakan persekitaran Cartpole:
import torchrl from torchrl.envs import GymEnv from torchrl.envs.utils import check_env_specs check_env_specs(GymEnv("CartPole-v1"))
Tentukan hyperparameters:
<code>[torchrl][INFO] check_env_specs succeeded!</code>
Tentukan dasar rangkaian saraf yang mudah:
env = GymEnv("CartPole-v1")
Buat pengumpul data dan penampan replay:
from torchrl.envs import GymEnv, StepCounter, TransformedEnv env = TransformedEnv(GymEnv("CartPole-v1"), StepCounter())
Tentukan modul latihan:
from torchrl.envs import Compose base_env = GymEnv('CartPole-v1', device=device) env = TransformedEnv( base_env, Compose( ObservationNorm(in_keys=["observation"]), StepCounter() ) )
Melaksanakan gelung latihan (dipermudahkan untuk keringkasan):
import torchrl import torch from tensordict import TensorDict from torchrl.data.tensor_specs import Bounded action_spec = Bounded(-torch.ones(1), torch.ones(1)) actor = torchrl.envs.utils.RandomPolicy(action_spec=action_spec) td = actor(TensorDict({}, batch_size=[])) print(td.get("action"))
Tambah penilaian dan pembalakan ke gelung latihan (dipermudahkan):
import time import matplotlib.pyplot as plt from torchrl.envs import GymEnv, StepCounter, TransformedEnv from tensordict.nn import TensorDictModule as TensorDict, TensorDictSequential as Seq from torchrl.modules import EGreedyModule, MLP, QValueModule from torchrl.objectives import DQNLoss, SoftUpdate from torchrl.collectors import SyncDataCollector from torchrl.data import LazyTensorStorage, ReplayBuffer from torch.optim import Adam from torchrl._utils import logger as torchrl_logger
Cetak masa latihan dan hasil plot:
env = TransformedEnv(GymEnv("CartPole-v1"), StepCounter()) torch.manual_seed(0) env.set_seed(0)
(pelaksanaan DQN lengkap boleh didapati dalam buku kerja Datalab yang dirujuk.)
TorchRL menawarkan algoritma pra-dibina (DQN, DDPG, SAC, PPO, dan lain-lain). Bahagian ini menunjukkan menggunakan PPO.
Import Modul yang diperlukan:
INIT_RAND_STEPS = 5000 FRAMES_PER_BATCH = 100 OPTIM_STEPS = 10 EPS_0 = 0.5 BUFFER_LEN = 100_000 ALPHA = 0.05 TARGET_UPDATE_EPS = 0.95 REPLAY_BUFFER_SAMPLE = 128 LOG_EVERY = 1000 MLP_SIZE = 64
Tentukan hyperparameters:
value_mlp = MLP(out_features=env.action_spec.shape[-1], num_cells=[MLP_SIZE, MLP_SIZE]) value_net = TensorDict(value_mlp, in_keys=["observation"], out_keys=["action_value"]) policy = Seq(value_net, QValueModule(spec=env.action_spec)) exploration_module = EGreedyModule( env.action_spec, annealing_num_steps=BUFFER_LEN, eps_init=EPS_0 ) policy_explore = Seq(policy, exploration_module)
(baki pelaksanaan PPO, termasuk definisi rangkaian, pengumpulan data, fungsi kerugian, pengoptimuman, dan gelung latihan, mengikuti struktur yang sama dengan tindak balas asal tetapi ditinggalkan di sini untuk keringkasan. Rujuk kepada respons asal untuk kod lengkap.)
Memantau kemajuan latihan menggunakan Tensorboard:
collector = SyncDataCollector( env, policy_explore, frames_per_batch=FRAMES_PER_BATCH, total_frames=-1, init_random_frames=INIT_RAND_STEPS, ) rb = ReplayBuffer(storage=LazyTensorStorage(BUFFER_LEN))
Visualisasikan dengan: tensorboard --logdir="training_logs"
Debugging melibatkan pemeriksaan spesifikasi persekitaran:
loss = DQNLoss(value_network=policy, action_space=env.action_spec, delay_value=True) optim = Adam(loss.parameters(), lr=ALPHA) updater = SoftUpdate(loss, eps=TARGET_UPDATE_EPS)
pemerhatian dan tindakan sampel:
total_count = 0 total_episodes = 0 t0 = time.time() success_steps = [] for i, data in enumerate(collector): rb.extend(data) # ... (training steps, similar to the original response) ...
memvisualisasikan prestasi ejen dengan memberikan video (memerlukan torchvision
dan av
):
# ... (training steps) ... if total_count > 0 and total_count % LOG_EVERY == 0: torchrl_logger.info(f"Successful steps: {max_length}, episodes: {total_episodes}") if max_length > 475: print("TRAINING COMPLETE") break
Tutorial ini memberikan pengenalan yang komprehensif kepada TorchRL, mempamerkan keupayaannya melalui contoh DQN dan PPO. Eksperimen dengan persekitaran dan algoritma yang berbeza untuk meningkatkan lagi kemahiran RL anda. Sumber yang dirujuk menyediakan peluang pembelajaran tambahan.
Atas ialah kandungan terperinci Bermula dengan Torchrl untuk pembelajaran tetulang yang mendalam. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!