У меня есть модель, которая с учетом конфигурации или состояния (из куба Рубика, но что угодно, это последовательность целых чисел) генерирует движение (от 0 до 5). Это движение может быть использовано для донесения конфигурации в другое состояние, а модель была первоначально обучена донести конфигурацию в решение, идентичное состояние, генерируя в цикле каждый токен, либо движение, либо число в конфигурации, или число, кодируя пространство. С другой стороны, мы также можем изменить состояние детерминированным способом с помощью функции, называемой Reindex ниже. Теперь я могу генерировать множество конфигураций с функцией, которая называется bould_state, и запустить следующее: < /p>
def reindex(state,moves):
#args are tensors
for m in dict_generators[moves]:
state = state[m]
return(state)
def build_state(n):
seq_moves = torch.randint(0, 5, (n,), device=device)
state = reindex(identical_state,seq_moves)
return state
for i in range(400):
#encoding
x = build_state(int(i / 20)+1)
x = x + 8
# add "next line" tokens, generate encoded torch.Size([26])
x = torch.cat((x, torch.tensor([7], device=device)), dim=0)
x = torch.cat((torch.tensor([7], device=device), x), dim=0)
print(model.generate(x[None],temperature=temperature,top_k=top_k))
< /code>
Как вы можете видеть, модель не ест должным образом конфигурации, а кодирование, которое выполняется для того, чтобы все число в конфигурации смещено на 8, и используя первые восемь токенов, чтобы дать движение (от 0 до 5), либо заявление, что конфигурация достигла желаемого состояния разрешения (6) или снова к отдельности (7). Приведенный выше код работает довольно хорошо, и на самом деле он генерирует только токен движения, за исключением чрезвычайно небольших случаев, когда, основываясь на обучении, он иногда возвращает токен 8, который является кодированием 0 и начинающим конфигурации EVEY. Если я запускаю код, который хочет генерировать не только движение, но и всю последовательность для решения, в результате цикла, в котором я генерирую движение, и я реиндекс один и тот же (с соответствующим декундовым экодигом), количество «неправильных» токенов 8 становится безумно намного выше, хотя то, что я передаю модели, является лишь конфигурацией, как в предыдущем случае, только новая, а не в новой. Например, код < /p>
def predict_solution(x):
#arg tensor torch.Size([24])
sol = []
list_probs = []
# encode:
x = x + 8
# add next line tokens, generate encoded torch.Size([26])
x = torch.cat((x, torch.tensor([7], device=device)), dim=0)
x = torch.cat((torch.tensor([7], device=device), x), dim=0)
#make it torch.Size([1,26]) to pass to the model
x = x[None]
for it in range(max_sol_length):
y,probs = model.generate(x, temperature=temperature, top_k=top_k)
#y, probs are two gradients os Size [1,1], probs keeps gradient
if torch.equal(y torch.tensor([[8]]))
print("wrong token")
#force it someway to be a movement in order to apply reindex below
list_probs.append(probs)
sol.append(y)
#decode x into a tensor of torch.Size([24]) to pass to reindex
x = x.squeeze(0)
x = x-8
x = x[1:-1]
x = reindex(x,y)
x = x[None] #unsqueeze(0)
if torch.equal(x, identical_state[None]):
return sol, list_probs
#re-encode to pass to the model again
x = x + 8
x = torch.cat((x, torch.tensor([[7]], device=device)), dim=1)
x = torch.cat((torch.tensor([[7]], device=device), x), dim=1)
if it == max_sol_length - 1:
print("solution not found")
return sol, list_probs
for i in range(400):
x = build_state(int(i / 20)+1)
predict_solution(x)
< /code>
Кажется, что каждый цикл Аргумент генерируется вспоминает, что мы не предоставляем его новым свежеприготовленным тензором, а с реиндексированным. Что нужно знать, так это то, что я хотел бы сохранить градиент для вероятностей, отобранных моделью вместе с движением, чтобы продолжать заниматься подкреплением по этой модели.
Почему это происходит и как это исправить? Есть ли способ сделать это, не углубляясь в повторной тренировке исходной модели?>
Подробнее здесь: https://stackoverflow.com/questions/797 ... t-contexts
Разница между токенами, генерируемыми на конфигурации в двух разных контекстах ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Разница между токенами, генерируемыми на конфигурации в двух разных контекстах
Anonymous » » в форуме Python - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как реализовать уведомления об обертке свойств в рамках в разных контекстах в Swift?
Anonymous » » в форуме IOS - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как реализовать уведомления об обертке свойств в рамках в разных контекстах в Swift?
Anonymous » » в форуме IOS - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-