Нейросети. Основы. Дэвид Рид

Чтение книги онлайн.

Читать онлайн книгу Нейросети. Основы - Дэвид Рид страница 14

Автор:
Жанр:
Серия:
Издательство:
Нейросети. Основы - Дэвид Рид

Скачать книгу

style="font-size:15px;">      Рассмотрим задачу "CartPole" из OpenAI Gym. В этой задаче агент управляет тележкой, на которой закреплен вертикально стоящий столб. Цель агента – балансировать столб, не позволяя ему упасть, двигая тележку влево или вправо.

      Описание среды "CartPole"

      Состояния:

      – Положение тележки (отрицательное значение – тележка слева от центра, положительное – справа).

      – Скорость тележки.

      – Угол отклонения столба от вертикального положения.

      – Угловая скорость столба.

      Действия:

      – Двигать тележку влево.

      – Двигать тележку вправо.

      Награды:

      – Агент получает награду +1 за каждый шаг, пока столб остается вертикально.

      Конечное состояние:

      – Эпизод заканчивается, если столб отклоняется слишком сильно от вертикального положения или тележка выходит за пределы поля.

      Пример кода для Deep Q-Learning

      Для реализации DQN мы будем использовать библиотеку PyTorch для создания и обучения нейронной сети.

      Установка необходимых библиотек

      Для начала нужно установить OpenAI Gym и PyTorch, если они еще не установлены:

      ```bash

      pip install gym torch

      ```

      Пример кода

      ```python

      import gym

      import torch

      import torch.nn as nn

      import torch.optim as optim

      import numpy as np

      from collections import deque, namedtuple

      import random

      # Определение архитектуры нейронной сети

      class DQN(nn.Module):

      def __init__(self, state_size, action_size):

      super(DQN, self).__init__()

      self.fc1 = nn.Linear(state_size, 24)

      self.fc2 = nn.Linear(24, 24)

      self.fc3 = nn.Linear(24, action_size)

      def forward(self, x):

      x = torch.relu(self.fc1(x))

      x = torch.relu(self.fc2(x))

      return self.fc3(x)

      # Параметры обучения

      env = gym.make('CartPole-v1')

      state_size = env.observation_space.shape[0]

      action_size = env.action_space.n

      batch_size = 64

      gamma = 0.99 # Коэффициент дисконтирования

      epsilon = 1.0 # Вероятность случайного действия

      epsilon_min = 0.01

      epsilon_decay = 0.995

      learning_rate = 0.001

      target_update = 10 # Как часто обновлять целевую сеть

      memory_size = 10000

      num_episodes = 1000

      # Определение памяти для опыта

      Transition = namedtuple('Transition', ('state', 'action', 'next_state', 'reward'))

      memory = deque(maxlen=memory_size)

      # Инициализация сети и оптимизатора

      policy_net = DQN(state_size, action_size)

      target_net = DQN(state_size, action_size)

      target_net.load_state_dict(policy_net.state_dict())

      target_net.eval()

      optimizer = optim.Adam(policy_net.parameters(), lr=learning_rate)

      # Функция для выбора действия

      def select_action(state, epsilon):

      if random.random() < epsilon:

      return env.action_space.sample()

      else:

      with torch.no_grad():

      return policy_net(torch.tensor(state, dtype=torch.float32)).argmax().item()

      #

Скачать книгу