Читать книгу Нейросети. Основы онлайн
Установка необходимых библиотек
Для начала нужно установить 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()
# Функция для обновления памяти
def store_transition(state, action, next_state, reward):
memory.append(Transition(state, action, next_state, reward))
# Функция для обучения сети
def optimize_model():
if len(memory) < batch_size:
return
transitions = random.sample(memory, batch_size)
batch = Transition(*zip(*transitions))