- TF-Agents 모듈 임포트하기
- TF-Agents 환경 준비하기
- TF-Agents 환경 살펴보기
- TF-Agents 행동 반영하기
- TF-Agents 환경 Wrapper 사용하기
- TF-Agents 에이전트 구성하기
- TF-Agents 정책 다루기
- TF-Agents 정책 평가하기
- TF-Agents 데이터 수집하기
- TF-Agents 에이전트 훈련하기
- Python Tutorial
- NumPy Tutorial
- Matplotlib Tutorial
- PyQt5 Tutorial
- BeautifulSoup Tutorial
- xlrd/xlwt Tutorial
- Pillow Tutorial
- Googletrans Tutorial
- PyWin32 Tutorial
- PyAutoGUI Tutorial
- Pyperclip Tutorial
- TensorFlow Tutorial
- Tips and Examples
TF-Agents 정책 다루기¶
정책 (Policy)은 강화학습의 환경에서 에이전트가 동작하는 방식입니다.
정책은 TimeStep에 대해 행동 (Action)을 반환하며, 강화학습은 목표에 맞게 동작하는 정책을 얻기 위한 과정입니다.
■ Table of Contents
1) 모듈 임포트하기¶
예제¶
import tensorflow as tf
from tf_agents.environments import suite_gym
from tf_agents.environments import tf_py_environment
from tf_agents.agents.dqn import dqn_agent
from tf_agents.networks import q_network
from tf_agents.utils import common
from tf_agents.policies import random_tf_policy
tf_agents.policies 모듈은 정책 (Policy)과 관련된 모듈을 포함합니다.
이 중 임의의 행동을 선택하는 정책과 관련된 random_tf_policy 모듈을 임포트합니다.
2) 에이전트의 정책¶
예제¶
env_name = 'CartPole-v0'
train_py_env = suite_gym.load(env_name)
eval_py_env = suite_gym.load(env_name)
train_env = tf_py_environment.TFPyEnvironment(train_py_env)
eval_env = tf_py_environment.TFPyEnvironment(eval_py_env)
q_net = q_network.QNetwork(
train_env.observation_spec(),
train_env.action_spec(),
fc_layer_params=(100,)
)
optimizer = tf.compat.v1.train.AdamOptimizer(learning_rate=1e-3)
train_step_counter = tf.Variable(0)
agent = dqn_agent.DqnAgent(
train_env.time_step_spec(),
train_env.action_spec(),
q_network=q_net,
optimizer=optimizer,
td_errors_loss_fn=common.element_wise_squared_loss,
train_step_counter=train_step_counter)
agent.initialize()
eval_policy = agent.policy
collect_policy = agent.collect_policy
random_policy = random_tf_policy.RandomTFPolicy(train_env.time_step_spec(),
train_env.action_spec())
print(eval_policy)
print(collect_policy)
print(random_policy)
<tf_agents.policies.greedy_policy.GreedyPolicy object at 0x7fdb8be6f588>
<tf_agents.policies.epsilon_greedy_policy.EpsilonGreedyPolicy object at 0x7fdb8be6f470>
<tf_agents.policies.random_tf_policy.RandomTFPolicy object at 0x7fdb8be6f860>
dqn_agent.DqnAgent 인스턴스는 policy, collect_policy 속성을 포함합니다.
policy는 에이전트의 현재 정책을, collect_policy는 에이전트가 환경으로부터 데이터를 수집하는 정책을 반환합니다.
에이전트와 독립적인 정책을 만들 수 있습니다.
random_tf_policy 모듈의 RandomTFPolicy 클래스는 주어진 action_spec에서 임의로 샘플링한 행동을 반환합니다.
3) 정책으로부터 행동 얻기¶
예제¶
ex_env = tf_py_environment.TFPyEnvironment(
suite_gym.load('CartPole-v0')
)
time_step0 = ex_env.reset()
rand_action = random_policy.action(time_step0)
print(rand_action)
print(rand_action.action)
print(rand_action.action.numpy())
PolicyStep(action=<tf.Tensor: shape=(1,), dtype=int64, numpy=array([1])>, state=(), info=())
tf.Tensor([1], shape=(1,), dtype=int64)
[1]
임의의 CartPole 환경 (ex_env)을 하나 만들었습니다.
ex_env.reset()은 첫번째 TimeStep을 반환합니다.
policy.action(TimeStep)와 같이 action() 메서드를 사용해서, 정책으로부터 특정 TimeStep에 대한 행동을 얻을 수 있습니다.
rand_action은 정책 random_policy로부터 time_step0에 대해 얻은 임의의 행동입니다.
rand_action.action으로 Tensor 형태로, rand_action.action.numpy()는 NumPy 어레이 형태로 행동을 얻을 수 있습니다.
CartPole 환경에서 행동 1은 카트를 오른쪽으로 미는 동작을 의미합니다.