In [6]:
%load_ext autoreload
%autoreload 2


The autoreload extension is already loaded. To reload it, use:
  %reload_ext autoreload

In [51]:
from nupic.research.frameworks.dynamic_sparse.networks import GSCHeb
from nupic.research.frameworks.dynamic_sparse.models import DSNNWeightedMag
import torch

In [20]:
network = GSCHeb()

In [25]:
network.features(torch.randn(1, 1,32,32)).shape


Out[25]:
torch.Size([1, 1600])

In [38]:
network.classifier


Out[38]:
Sequential(
  (0): Linear(in_features=1600, out_features=1000, bias=True)
  (1): BatchNorm1d(1000, eps=1e-05, momentum=0.1, affine=False, track_running_stats=True)
  (2): KWinners(n=1000, percent_on=0.1, boost_strength=1.5, boost_strength_factor=0.9, k_inference_factor=1.5, duty_cycle_period=1000)
  (3): Linear(in_features=1000, out_features=12, bias=True)
)

In [ ]:
network

In [39]:
x = torch.randn(4, 1600)
x = network.classifier[0](x)
x = network.classifier[1](x)
x = network.classifier[2](x)
x = network.classifier[3](x)

x.shape


Out[39]:
torch.Size([4, 12])

In [40]:
network.classifier(torch.randn(4, 1600)).shape


Out[40]:
torch.Size([4, 12])

In [43]:
network(torch.randn(4, 1,32,32)).shape


Out[43]:
torch.Size([4, 12])

In [44]:
network.init_hebbian()

In [46]:
network(torch.randn(4, 1,32,32)).shape


Out[46]:
torch.Size([4, 12])

In [47]:
for i in range(500):
    network(torch.randn(16, 1,32,32))

In [48]:
network.coactivations


Out[48]:
[tensor([[ 97.,  88., 112.,  ..., 102., 111.,  94.],
         [ 96., 137., 102.,  ...,  93., 114.,  99.],
         [ 96.,  78., 126.,  ..., 116., 113., 114.],
         ...,
         [ 61.,  92.,  79.,  ...,  90.,  84.,  79.],
         [ 72.,  84.,  70.,  ...,  90., 100.,  70.],
         [ 91., 102.,  77.,  ...,  79.,  88.,  78.]]),
 tensor([[547., 452., 419.,  ..., 336., 554., 174.],
         [466., 403., 492.,  ..., 369., 545., 135.],
         [438., 506., 384.,  ..., 394., 558., 149.],
         ...,
         [425., 497., 445.,  ..., 396., 530., 150.],
         [521., 439., 418.,  ..., 417., 595., 177.],
         [498., 443., 418.,  ..., 385., 547., 159.]])]

In [59]:
network = GSCHeb()
model = DSNNWeightedMag(network, dict(on_perc=01.))
model.setup()

In [60]:
for i in range(4):
    network(torch.randn(16, 1,32,32))

In [61]:
network.coactivations


Out[61]:
[tensor([[0., 0., 0.,  ..., 0., 2., 0.],
         [0., 0., 1.,  ..., 0., 1., 1.],
         [0., 1., 1.,  ..., 0., 2., 1.],
         ...,
         [0., 2., 2.,  ..., 0., 1., 0.],
         [0., 0., 2.,  ..., 0., 2., 0.],
         [0., 1., 1.,  ..., 0., 1., 1.]]),
 tensor([[5., 5., 2.,  ..., 2., 4., 3.],
         [3., 3., 2.,  ..., 4., 5., 3.],
         [2., 3., 2.,  ..., 3., 2., 3.],
         ...,
         [4., 1., 0.,  ..., 1., 2., 1.],
         [7., 6., 5.,  ..., 1., 5., 5.],
         [7., 4., 2.,  ..., 3., 5., 3.]])]

In [64]:
model._reinitialize_weights()

In [66]:
network.coactivations


Out[66]:
[tensor([[0., 0., 0.,  ..., 0., 2., 0.],
         [0., 0., 1.,  ..., 0., 1., 1.],
         [0., 1., 1.,  ..., 0., 2., 1.],
         ...,
         [0., 2., 2.,  ..., 0., 1., 0.],
         [0., 0., 2.,  ..., 0., 2., 0.],
         [0., 1., 1.,  ..., 0., 1., 1.]]),
 tensor([[5., 5., 2.,  ..., 2., 4., 3.],
         [3., 3., 2.,  ..., 4., 5., 3.],
         [2., 3., 2.,  ..., 3., 2., 3.],
         ...,
         [4., 1., 0.,  ..., 1., 2., 1.],
         [7., 6., 5.,  ..., 1., 5., 5.],
         [7., 4., 2.,  ..., 3., 5., 3.]])]

In [ ]: