الحالة: إصدار مستقر
تنفيذ وكيل DreamerV2 في TensorFlow 2. تم تضمين منحنيات التدريب لجميع الألعاب الـ 55.
إذا وجدت هذا الرمز مفيدًا، فيرجى الرجوع إليه في ورقتك البحثية:
@article{hafner2020dreamerv2,
title={Mastering Atari with Discrete World Models},
author={Hafner, Danijar and Lillicrap, Timothy and Norouzi, Mohammad and Ba, Jimmy},
journal={arXiv preprint arXiv:2010.02193},
year={2020}
}
DreamerV2 هو أول وكيل نموذج عالمي يحقق أداءً على المستوى البشري وفقًا لمعيار Atari. يتفوق DreamerV2 أيضًا على الأداء النهائي لأفضل الوكلاء الخاليين من النماذج Rainbow وIQN باستخدام نفس القدر من الخبرة والحساب. يتناوب التنفيذ في هذا المستودع بين تدريب النموذج العالمي، وتدريب السياسة، وجمع الخبرة، ويعمل على وحدة معالجة رسومات واحدة.
يتعلم DreamerV2 نموذجًا للبيئة مباشرة من الصور المدخلة عالية الأبعاد. لهذا، فإنه يتنبأ بالمستقبل باستخدام الحالات المستفادة المدمجة. تتكون الحالات من جزء حتمي والعديد من المتغيرات الفئوية التي يتم أخذ عينات منها. يتم معرفة ما سبق لهذه الفئات من خلال خسارة KL. يتم تعلم النموذج العالمي من طرف إلى طرف عبر التدرجات المباشرة، مما يعني أن تدرج الكثافة يتم ضبطه على تدرج العينة.
يتعلم DreamerV2 شبكات الممثل والناقد من المسارات المتخيلة للحالات الكامنة. تبدأ المسارات عند الحالات المشفرة للتسلسلات التي تمت مواجهتها مسبقًا. يتنبأ النموذج العالمي بعد ذلك بالمستقبل باستخدام الإجراءات المحددة وحالته المستفادة مسبقًا. يتم تدريب الناقد باستخدام التعلم بالفارق الزمني ويتم تدريب الممثل على تعظيم وظيفة القيمة من خلال التدرجات المعززة والمباشرة.
لمزيد من المعلومات:
أسهل طريقة لتشغيل DreamerV2 في بيئات جديدة هي تثبيت الحزمة عبر pip3 install dreamerv2
. يكتشف الرمز تلقائيًا ما إذا كانت البيئة تستخدم إجراءات منفصلة أو مستمرة. فيما يلي مثال استخدام يقوم بتدريب DreamerV2 على بيئة MiniGrid:
import gym
import gym_minigrid
import dreamerv2 . api as dv2
config = dv2 . defaults . update ({
'logdir' : '~/logdir/minigrid' ,
'log_every' : 1e3 ,
'train_every' : 10 ,
'prefill' : 1e5 ,
'actor_ent' : 3e-3 ,
'loss_scales.kl' : 1.0 ,
'discount' : 0.99 ,
}). parse_flags ()
env = gym . make ( 'MiniGrid-DoorKey-6x6-v0' )
env = gym_minigrid . wrappers . RGBImgPartialObsWrapper ( env )
dv2 . train ( env , config )
لتعديل وكيل DreamerV2، قم باستنساخ المستودع واتبع الإرشادات أدناه. يتوفر أيضًا ملف Dockerfile، في حالة عدم رغبتك في تثبيت التبعيات على نظامك.
الحصول على التبعيات:
pip3 install tensorflow==2.6.0 tensorflow_probability ruamel.yaml ' gym[atari] ' dm_control
القطار على أتاري:
python3 dreamerv2/train.py --logdir ~ /logdir/atari_pong/dreamerv2/1
--configs atari --task atari_pong
التدريب على التحكم في DM:
python3 dreamerv2/train.py --logdir ~ /logdir/dmc_walker_walk/dreamerv2/1
--configs dmc_vision --task dmc_walker_walk
نتائج المراقبة:
tensorboard --logdir ~ /logdir
توليد المؤامرات:
python3 common/plot.py --indir ~ /logdir --outdir ~ /plots
--xaxis step --yaxis eval_return --bins 1e6
يتيح لك Dockerfile تشغيل DreamerV2 دون تثبيت تبعياته في نظامك. يتطلب هذا أن يكون لديك Docker مع إمكانية الوصول إلى GPU.
تحقق من الإعداد الخاص بك:
docker run -it --rm --gpus all tensorflow/tensorflow:2.4.2-gpu nvidia-smi
القطار على أتاري:
docker build -t dreamerv2 .
docker run -it --rm --gpus all -v ~ /logdir:/logdir dreamerv2
python3 dreamerv2/train.py --logdir /logdir/atari_pong/dreamerv2/1
--configs atari --task atari_pong
التدريب على التحكم في DM:
docker build -t dreamerv2 . --build-arg MUJOCO_KEY= " $( cat ~ /.mujoco/mjkey.txt ) "
docker run -it --rm --gpus all -v ~ /logdir:/logdir dreamerv2
python3 dreamerv2/train.py --logdir /logdir/dmc_walker_walk/dreamerv2/1
--configs dmc_vision --task dmc_walker_walk
تصحيح الأخطاء بكفاءة. يمكنك استخدام تكوين debug
كما في --configs atari debug
. يؤدي هذا إلى تقليل حجم الدفعة وزيادة تكرار التقييم وتعطيل تجميع الرسم البياني tf.function
لتسهيل تصحيح الأخطاء سطرًا تلو الآخر.
معايير التدرج اللانهائي. وهذا أمر طبيعي ويتم وصفه ضمن مقياس الخسارة في دليل الدقة المختلط. يمكنك تعطيل الدقة المختلطة عن طريق تمرير --precision 32
إلى البرنامج النصي للتدريب. الدقة المختلطة أسرع ولكنها من حيث المبدأ يمكن أن تسبب عدم استقرار عددي.
الوصول إلى المقاييس المسجلة. يتم تخزين المقاييس بتنسيق خطوط TensorBoard وJSON. يمكنك تحميلها مباشرة باستخدام pandas.read_json()
. يقوم البرنامج النصي للتخطيط أيضًا بتخزين المقاييس المحذوفة والمجمعة لعمليات التشغيل المتعددة في ملف JSON واحد لتسهيل التخطيط اليدوي.