Buckets:
| import torch | |
| import torch.nn as nn | |
| import torch.nn.functional as F | |
| from typing import List, Dict, Tuple, Any, Optional | |
| class GeometricEmbedding(nn.Module): | |
| def __init__( | |
| self, num_objects=1000, num_relations=50, embedding_dim=128, hidden_dim=256 | |
| ): | |
| super().__init__() | |
| self.embedding_dim = embedding_dim | |
| self.object_embeddings = nn.Embedding(num_objects, embedding_dim) | |
| self.relation_embeddings = nn.Embedding(num_relations, embedding_dim) | |
| self.property_encoder = nn.Sequential( | |
| nn.Linear(10, hidden_dim), | |
| nn.ReLU(), | |
| nn.Linear(hidden_dim, embedding_dim), | |
| ) | |
| self.attention = nn.MultiheadAttention( | |
| embed_dim=embedding_dim, num_heads=8, dropout=0.1 | |
| ) | |
| self.output_projection = nn.Linear(embedding_dim, embedding_dim) | |
| def forward(self, object_ids, relation_ids, properties=None): | |
| batch_size = object_ids.size(0) | |
| obj_embeds = self.object_embeddings(object_ids) | |
| if relation_ids is not None: | |
| rel_embeds = self.relation_embeddings(relation_ids) | |
| obj_embeds = obj_embeds + rel_embeds | |
| if properties is not None: | |
| prop_embeds = self.property_encoder(properties) | |
| obj_embeds = obj_embeds + prop_embeds | |
| obj_embeds_t = obj_embeds.unsqueeze(0) | |
| attended, _ = self.attention(obj_embeds_t, obj_embeds_t, obj_embeds_t) | |
| attended = attended.squeeze(0) | |
| output = self.output_projection(attended + obj_embeds) | |
| return output | |
| def compute_similarity(self, embed1, embed2): | |
| return F.cosine_similarity(embed1, embed2, dim=-1) | |
Xet Storage Details
- Size:
- 1.69 kB
- Xet hash:
- c103036385559cc47eb8f6798d20ee1d73d821515d59de44f22c84e61e8c3c9b
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.