GNN со стабильными базовыми линиями
Я собираюсь использовать DGN или pytorch geometry для построения моей политики и сетей ценностей в стабильных базовых условиях, однако я изо всех сил пытаюсь понять, как отправлять наблюдения. Наблюдения должны быть одними из тренажерного зала
spaces
class, но я не уверен, как отправить объект графика, который может использоваться DGN или Pytorch геометрическим таким образом.
Фундаментальный вопрос, который у меня есть, заключается в том, как отправлять наблюдения за графом и где делать предварительную настройку, необходимую для использования DGN или pytorch geometry для настраиваемой стабильной базовой сети? Могу ли я упаковать график в стабильное пространство для наблюдения за базовыми линиями, которое каким-то образом могло бы принять DGN или геометрический pytorch?
Примечание: если у кого-то есть ссылка на github с каким-либо кодом, который сделал это, дайте мне знать, я везде искал
1 ответ
Вы можете сериализовать свой объект графа DGL с помощью pickle и преобразовать результирующую строку байтов в вектор целых чисел (каждый символ в строке соответствует одному int).
import dgl
import numpy as np
import pickle
def serialize_graph(graph: dgl.DGLGraph):
as_byte_string = pickle.dumps(graph)
as_int_list = [_ for _ in as_byte_string] # we get ints for free without explicitly casting
as_float_array = np.array(as_int_list, dtype=np.float32)
return as_float_array
Затем вы можете применить те же операции в обратном порядке, чтобы десериализовать векторное представление графика в вашем настраиваемом экстракторе функций.
import dgl
import pickle
import torch as th
def deserialize_graph(observation: th.Tensor):
as_int_tensor = observation.to(dtype=th.int32)
as_char_list = [chr(_) for _ in observation]
as_byte_string = bytearray(''.join(as_char_list), encoding='latin')
as_dgl_graph = pickle.loads(as_byte_string)
return as_dgl_graph