Рубрики
Без рубрики

Учебное обучение с TF2 и тренажерным залом (часть I)

Сегодня я начинаю свои упражнения по укреплению укрепления, используя Tensorflow 2.0. То же самое, что многие парни в этом буду … Теги с Tensorflow, Python, MachineLearning, Ai.

Сегодня я начинаю свои упражнения на Усиление укрепления Использование Tensorflow 2.0. То же самое, что и многие парни в этом домене, я использую знаменитый Картполь Игра (см. Рисунок ниже) Симпатийный зал Openai Для реализации и тестирования моих Rl. алгоритм. Можно проверить официальное введение CartPole на Эта страница Отказ

Этот пост покажет сырьевую структуру моей реализации. Я представлю основной цикл тренировочного процесса и основных концепций игры TF2, RL и Carthpole. Подробности алгоритмической работы будут представлены в следующем посте.

Подготовка пакета

Убедитесь, что Tensorflow .0), numpy и тренажерный зал были установлены.

Теперь импортируйте важные модули.

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = "2"

import tensorflow as tf

if tf.__version__.startswith("1."):     
    raise RuntimeError("Error!! You are using tensorflow-v1")

import numpy as np
import gym
import tensorflow.keras as keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation
import tensorflow.keras.backend as K

Политическая градиентная сеть

Я буду использовать метод градиента политики для решения этой проблемы RL. Таким образом я определяю первым классом для этого метода. На данный момент этот класс почти пуст. Я заполню его всеми необходимыми функциями позже.

Этот класс состоит из последовательной нейронной сети. Ввод этой сети должен быть вектор состояния наблюдения и вывода уникального индекса действия. Он должен предоставить некоторые важные функции для расчета градиентов, обновление градиентов модели, вычисления моделей награды и сохранения/перезагрузки.

# a class of Policy Gradient Neural Network
class PolicyGradientNet:

    def __init__(self):

        self.model = None 
        self.gradients = []
        self.optimizer = None

    def create_model(self):     
        self.model = Sequential()
        ## TODO: fulfill the neural netwrok model 

        self.optimizer = keras.optimizers.Adam(self.model.variables, lr=0.01)
        pass

    def calc_grad(self):

        pass
    def update_gradient(self):
        ### apply new gradient
        pass

    def get_gradients(self):
        return  self.gradients

    def get_variable(self):
        return self.model.variables

    def calc_rewards(self):
        pass

    def save_model(self):
        pass

    def load_model(self):
        pass

Подготовка керпола

Эта часть кода будет вызывать спортивную среду и печатает свои параметры для получения информации.

ENV_SEED = 1024  ## Reproducibility of the game
NP_SEED = 1024  ## Reproducibility of numpy random

env = gym.make('CartPole-v0')
env.seed(ENV_SEED)  
np.random.seed(NP_SEED)


### The Discrete space allows a fixed range of non-negative numbers, so in this case valid actions are either 0 or 1. 
### The Box space represents an n-dimensional box, so valid observations will be an array of 4 numbers. 
print(env.action_space)
print(env.observation_space)
### We can also check the Box's bounds:
print(env.observation_space.high)
print(env.observation_space.low)

Главная петля

Это главный цикл для обучения. Поскольку класс PolicyGradEtnet не был закончен, так что здесь я ухожу СДЕЛАТЬ Ключевые слова для указания места, где мне нужно реализовать алгоритмический код RL.

В каждом эпизоде между Env и Agent существует множество циклов взаимодействия между Env и Agent. Учитывая текущее состояние, мой агент рассчитывает действие (0 или 1), которое применяется на тележке, то окружающая среда будет соответственно обновлять, поэтому наблюдается новое состояние, поэтому мой агент снова будет рассчитать действие для применения и т. Д. Отказ

Ниже приведен скриншот официальной презентации взаимодействия агента-енд:

Текущий код этой части:

# define firstly an instance of PolicyGradientNet 
agent = PolicyGradientNet()

update_step = 5   # number of episodes for updating the network's gradient
limit_train = 1000  # training episode limit for stopping
i = 0  # episode counter
max_step = 0  # record the maximum steps in all episodes

while i < limit_train:  
    step  = 0
    state_current = env.reset()  ## reset the game so it will play from its initial state

    while True:

        env.render()  ## refreshing of visual result
        step += 1

        ## calculate an action 
        ## TODO: use agent.model to calculate the optimal action
        a = np.random.choice([0, 1], p=[0.5, 0.5])

        ## env.step() shall return: observation(object), reward(float), done(boolean),info(dict)
        ## check more info at https://gym.openai.com/docs/
        state_obs, reward, done, info = env.step(a) 
        state_current = state_obs  ## update current state vector
        x, x_prime, theta, theta_prime = state_obs  ## state_obs  consists of : current x position, velocity, current pole orientation (about vertical axis) and current angular velocity 

        if done:  # done being True indicates the episode has terminated. 
            ## TODO: launch agent training
            if max_step < step:
                max_step = step
            print("Step: ", step)

            ## TODO: update gradients
            break
    if i % 100 == 0:
        print("Max step is {} until episode {}  ".format(max_step, i))

    i += 1

Теперь симуляция является чем-то вроде этого:

Полная программа будет представлена в следующем посте.

Оригинал: “https://dev.to/jemaloqiu/reinforcement-learning-with-tf2-and-gym-part-i-2j5”