У меня есть код для предыдущей версии PyTorch, и я получаю 2 предупреждения для 3-й строки:
import torch.nn.functional as F
def select_action(self, state):
probabilities = F.softmax(self.model(Variable(state, volatile = True))*100) # T=100
action = probs.multinomial(num_samples=1)
return action.data[0,0]
UserWarning: volatile была удалена и теперь не имеет никакого эффекта. Вместо этого используйте with
torch.no_grad():
.
UserWarning: неявный выбор размера для softmax устарел. Измените вызов, чтобы включить dim = X> в качестве аргумента.
Я обнаружил, что:
Volatile рекомендуется для режима чистого вывода, когда вы уверены, что выиграли даже не звонит .backward (). Он более эффективен, чем любая другая настройка автограда - он использует абсолютный минимальный объем памяти для оценки модели. volatile также определяет, что require_grad является False.
Прав ли я, что мне следует просто удалить его? И потому что я хочу получить вероятности, поэтому я должен использовать dim = 1? и 3-я строка моего кода должна выглядеть так:
probabilities = F.softmax(self.model(Variable(state), dim=1)*100) # T=100
состояние создается здесь:
def update(self, reward, new_signal):
new_state = torch.Tensor(new_signal).float().unsqueeze(0)
self.memory.push((self.last_state, new_state, torch.LongTensor([int(self.last_action)]), torch.Tensor([self.last_reward])))
action = self.select_action(new_state)
if len(self.memory.memory) > 100:
batch_state, batch_next_state, batch_action, batch_reward = self.memory.sample(100)
self.learn(batch_state, batch_next_state, batch_reward, batch_action)
self.last_action = action
self.last_state = new_state
self.last_reward = reward
self.reward_window.append(reward)
if len(self.reward_window) > 1000:
del self.reward_window[0]
return action