diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c20c2ab --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__ + diff --git a/decagon_pytorch/__init__.py b/decagon_pytorch/__init__.py new file mode 100644 index 0000000..f628a28 --- /dev/null +++ b/decagon_pytorch/__init__.py @@ -0,0 +1,3 @@ +from .weights import * +from .convolve import * +from .model import * diff --git a/decagon_pytorch/convolve.py b/decagon_pytorch/convolve.py new file mode 100755 index 0000000..e69de29 diff --git a/decagon_pytorch/dropout.py b/decagon_pytorch/dropout.py new file mode 100644 index 0000000..3162572 --- /dev/null +++ b/decagon_pytorch/dropout.py @@ -0,0 +1,18 @@ +import torch + + +def dropout_sparse(x, keep_prob): + """Dropout for sparse tensors. + """ + x = x.coalesce() + i = x._indices() + v = x._values() + size = x.size() + + n = keep_prob + torch.rand(len(v)) + n = torch.floor(n).to(torch.bool) + i = i[:,n] + v = v[n] + x = torch.sparse_coo_tensor(i, v, size=size) + + return x * (1./keep_prob) diff --git a/decagon_pytorch/model.py b/decagon_pytorch/model.py new file mode 100644 index 0000000..e69de29 diff --git a/decagon_pytorch/weights.py b/decagon_pytorch/weights.py new file mode 100644 index 0000000..305a70f --- /dev/null +++ b/decagon_pytorch/weights.py @@ -0,0 +1,13 @@ +import torch +import numpy as np + + +def init_glorot(input_dim, output_dim): + """Create a weight variable with Glorot & Bengio (AISTATS 2010) + initialization. + """ + init_range = np.sqrt(6.0 / (input_dim + output_dim)) + initial = -init_range + 2 * init_range * \ + torch.rand(( input_dim, output_dim ), dtype=torch.float32) + initial = initial.requires_grad_(True) + return initial