Skip to content

Instantly share code, notes, and snippets.

View xmodar's full-sized avatar

Modar M. Alfadly xmodar

View GitHub Profile
@xmodar
xmodar / point_pe.py
Last active October 21, 2021 00:07
Positional encoding for point clouds
import torch
def sinusoidal(positions, features=16, periods=10000):
"""Encode `positions` using sinusoidal positional encoding
Args:
positions: tensor of positions
features: half the number of features per position
periods: used frequencies for the sinusoidal functions
@xmodar
xmodar / softmax_mask.py
Created October 8, 2021 23:54
Differentiable mask for logits before a softmax operation
import torch
__all__ = ['softmax_mask']
class SoftmaxMask(torch.autograd.Function):
"""Differentiable mask for logits before a softmax operation"""
@staticmethod
def forward(ctx, *args, **kwargs):
inputs, = args
@xmodar
xmodar / gumbel_softmax.py
Created October 8, 2021 16:02
Gubmbel Softmax
import torch
def randg(*args, like=None, **kwargs):
"""Sample from Gumbel(location=0, scale=1)"""
generator = kwargs.pop('generator', None)
requires_grad = kwargs.pop('requires_grad', False)
if like is None:
samples = torch.empty(*args, **kwargs)
else:
import tempfile
import urllib.request
import importlib.util
from pathlib import Path
def import_from_url(url):
"""Import a module from a given URL"""
with tempfile.TemporaryDirectory() as path:
path = Path(path) / Path(url).name
@xmodar
xmodar / monitor_torch.py
Created August 31, 2021 22:49
Tool to monitor used GPU memory (bytes) and time (nanseconds) in PyTorch
import gc
import math
import time
import datetime
from contextlib import contextmanager
import torch
class Monitor:
@xmodar
xmodar / modelnet40.py
Last active August 25, 2021 15:42
ModelNet40 Dataset
import ssl
import urllib
from pathlib import Path
import torch
from torch.utils.data import Dataset
from torchvision.datasets.utils import extract_archive, check_integrity
import h5py
import pandas as pd
@xmodar
xmodar / fitting_gaussian.ipynb
Last active August 20, 2021 04:07
Fitting Gaussian to Sampled Data Using PyTorch.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@xmodar
xmodar / rearrange.py
Last active July 31, 2021 20:08
Memics einops.rearrange for simple cases. Can be simplified with named_tensors. Can be optimized with tracing.
import math
def chunk_dim(tensor, chunks, dim=0):
"""Split a dimension of a tensor into two dimensions"""
shape = list(tensor.shape)
shape[dim] //= chunks
shape.insert(dim, chunks)
return tensor.view(shape)
"""YOLOv3 object detector."""
import math
from pathlib import Path
from urllib.request import urlopen
from PIL import Image
from PIL import ImageColor, ImageOps
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import itertools
from typing import Tuple, Optional
from contextlib import contextmanager
import torch
from torch.utils import benchmark
# @torch.jit.script
def nearest_neighbors(