in agents/obj_nets.py [0:0]
def __init__(self,
n_hist_frames=3,
n_fwd_times=0,
n_heads=8,
n_layers=6,
embedding_size=128,
aggregate_hidden_size=128,
score_hidden_first_layer_scale=1,
aggregate='mean',
n_inp=phyre_simulator.MAX_NUM_OBJECTS,
embed_tf=True,
shuffle_embed=False,
class_extra_layer=False,
tf_layer_norm=False):
super().__init__()
self.n_inp = n_inp
self.score_hidden_first_layer_scale = score_hidden_first_layer_scale
self.n_timesteps = n_hist_frames + n_fwd_times
self.n_heads = n_heads
self.n_layers = n_layers
self.embedding_size = embedding_size
self.embed_tf = embed_tf
self.shuffle_embed = shuffle_embed
self.tf_layer_norm = tf_layer_norm
self.encoder = nn.Sequential(
nn.Linear(phyre.FeaturizedObjects._NUM_FEATURES,
self.embedding_size),
nn.ReLU(),
nn.Linear(self.embedding_size, self.embedding_size),
)
self.pos_encoder = PositionalEncoding(self.embedding_size,
max_len=self.n_timesteps,
num_inp=self.n_inp)
encoder_layers = TransformerEncoderLayer(self.embedding_size,
nhead=self.n_heads)
if self.tf_layer_norm:
norm = nn.LayerNorm(self.embedding_size)
else:
norm = None
self.transformer_encoder = TransformerEncoder(encoder_layers,
num_layers=self.n_layers,
norm=norm)
self.aggregate_hidden_size = aggregate_hidden_size
self.aggregation = aggregate
self.class_extra_layer = class_extra_layer
self.score_obj = nn.Sequential(
nn.Linear(self.embedding_size, self.aggregate_hidden_size),
nn.ReLU(),
nn.Linear(self.aggregate_hidden_size, self.aggregate_hidden_size),
nn.ReLU(),
nn.Linear(self.aggregate_hidden_size, 1),
)
self.score = nn.Sequential(
nn.Linear(
phyre_simulator.MAX_NUM_OBJECTS * self.embedding_size *
self.n_timesteps, self.aggregate_hidden_size),
nn.ReLU(),
nn.Linear(self.aggregate_hidden_size, self.aggregate_hidden_size),
nn.ReLU(),
nn.Linear(self.aggregate_hidden_size, 1),
)
if self.class_extra_layer:
self.score_goal = nn.Sequential(
nn.Linear(
2 * self.embedding_size * self.n_timesteps,
int(self.embedding_size * self.n_timesteps *
phyre_simulator.MAX_NUM_OBJECTS / 2.0)),
nn.ReLU(),
nn.Linear(
int(self.embedding_size * self.n_timesteps *
phyre_simulator.MAX_NUM_OBJECTS / 2.0),
self.aggregate_hidden_size),
nn.ReLU(),
nn.Linear(self.aggregate_hidden_size,
self.aggregate_hidden_size),
nn.ReLU(),
nn.Linear(self.aggregate_hidden_size, 1),
)
self.score_timestep_embeddings = nn.Sequential(
nn.Linear(
self.embedding_size * self.n_timesteps,
self.embedding_size * self.n_timesteps *
phyre_simulator.MAX_NUM_OBJECTS),
nn.ReLU(),
nn.Linear(
self.embedding_size * self.n_timesteps *
phyre_simulator.MAX_NUM_OBJECTS,
self.aggregate_hidden_size),
nn.ReLU(),
nn.Linear(self.aggregate_hidden_size,
self.aggregate_hidden_size),
nn.ReLU(),
nn.Linear(self.aggregate_hidden_size, 1),
)
else:
self.score_goal = nn.Sequential(
nn.Linear(
2 * self.embedding_size * self.n_timesteps,
self.aggregate_hidden_size *
self.score_hidden_first_layer_scale),
nn.ReLU(),
nn.Linear(
self.aggregate_hidden_size *
self.score_hidden_first_layer_scale,
self.aggregate_hidden_size),
nn.ReLU(),
nn.Linear(self.aggregate_hidden_size, 1),
)
self.score_timestep_embeddings = nn.Sequential(
nn.Linear(
self.embedding_size * self.n_timesteps,
self.aggregate_hidden_size *
self.score_hidden_first_layer_scale),
nn.ReLU(),
nn.Linear(
self.aggregate_hidden_size *
self.score_hidden_first_layer_scale,
self.aggregate_hidden_size),
nn.ReLU(),
nn.Linear(self.aggregate_hidden_size, 1),
)