tahamajs's picture
download
raw
1.69 kB
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.