#python #pandas #numpy #vectorization #reinforcement-learning
#python #pandas #numpy #векторизация #подкрепление-обучение
Вопрос:
У меня есть этот цикл, который я бы хотел в идеале векторизовать:
for state, action, reward, next_state, done in batch:
reward = reward
if not done:
reward = reward self.gamma * np.amax(self.model.predict(next_state)[0])
target = self.model.predict(state)[0]
target[action] = reward
Если вы знакомы с RL, это пакет из памяти.
В этом случае state представляет собой массив из 10 элементов, такой же, как next_state (ввод в DQN). Action
является целым числом (индексом выходного вектора), reward
является плавающим и done
логическим.
Я попытался преобразовать пакет в фрейм данных. Что для меня сложно, так это векторизовать следующую строку: target[action] = reward
Элемент target с индексом action
должен получить значение вознаграждения из уравнения Беллмана ( reward = reward self.gamma * np.amax(self.model.predict(next_state)[0])
) if done == False
. Остальные получают self.model.predict(state)[0]
Есть идеи?
Комментарии:
1. Чтобы «векторизовать» подобный цикл, вам нужно переписать функции, подобные
model.predict
для работы со всеми пакетами одновременно. «Векторизация», которая обеспечивает большой прирост скорости, использует скомпилированныеnumpy
методы, которые работают со всем массивом. Он заменяет медленную итерацию на уровне python быстрыми итерациями на уровне c.2. Да, попробуйте передавать входные данные в сеть как сам пакет, а не как отдельные состояния.
3. Я действительно справился с этим. Моя проблема заключается в изменении определенных элементов всех строк в 2d массиве numpy