I got an error with the title, do I need to declare it using class?
import torch
import numpy as np
from bindsnet.network import Network
from bindsnet.network.nodes import Input, LIFNodes
from bindsnet.network.topology import Connection
from bindsnet.network.monitors import Monitor
time = 25
# bulding network
network = Network()
# 5layers of neuron
inpt = Input(n=64, sum_input=True)
middle = LIFNodes(n=40, trace=True, sum_input=True)
center = LIFNodes(n=40, trace=True, sum_input=True)
final = LIFNodes(n=40, trace=True, sum_input=True)
out = LIFNodes(n=6, sum_input=True) # n=6はラベルと同じ数にする
# connecting of each layers
inpt_middle = Connection(source=inpt, target=middle, wmin=0, wmax=1e-1)
middle_center = Connection(source=middle, target=center, wmin=0, wmax=1e-1)
center_final = Connection(source=center, target=final, wmin=0, wmax=1e-1)
final_out = Connection(source=final, target=out, wmin=0, wmax=1e-1)
# connecting all layers to network
network.add_layer(inpt, name='A')
network.add_layer(middle, name='B')
network.add_layer(center, name='C')
network.add_layer(final, name='D')
network.add_layer(out, name='E')
foward_connection = Connection(source=inpt, target=middle, w=0.05 + 0.1*torch.randn(inpt.n, middle.n))
network.add_connection(connection=foward_connection, source="A", target="B")
foward_connection = Connection(source=middle, target=center, w=0.05 + 0.1*torch.randn(middle.n, center.n))
network.add_connection(connection=foward_connection, source="B", target="C")
foward_connection = Connection(source=center, target=final, w=0.05 + 0.1*torch.randn(center.n, final.n))
network.add_connection(connection=foward_connection, source="C", target="D")
foward_connection = Connection(source=final, target=out, w=0.05 + 0.1*torch.randn(final.n, out.n))
network.add_connection(connection=foward_connection, source="D", target="E")
recurrent_connection = Connection(source=out, target=out, w=0.025*(torch.eye(out.n)-1),)
network.add_connection(connection=recurrent_connection, source="E", target="E")
# monitoring input's spikes and output's one
inpt_monitor = Monitor(obj=inpt, state_vars=("s", "v"), time=500,)
middle_monitor = Monitor(obj=inpt, state_vars=("s", "v"), time=500,)
center_monitor = Monitor(obj=inpt, state_vars=("s", "v"), time=500,)
final_monitor = Monitor(obj=inpt, state_vars=("s", "v"), time=500,)
out_monitor = Monitor(obj=inpt, state_vars=("s", "v"), time=500,)
# connecting monitor to network
network.add_monitor(monitor=inpt_monitor, name="A")
network.add_monitor(monitor=middle_monitor, name="B")
network.add_monitor(monitor=center_monitor, name="C")
network.add_monitor(monitor=final_monitor, name="D")
network.add_monitor(monitor=out_monitor, name="E")
for l in network.layers:
m = Monitor(network.layers[l], state_vars=['s'], time=time)
network.add_monitor(m, name=l)
# date loading
npzfile = np.load("C:/Users/name/Desktop/myo-python-1.0.4/myo-armband-nn-master/data/train_set.npz")
x = npzfile['x'] # ndarray [1,64]
y = npzfile['y'] # ndarry [1,6]
# transforming numpy to tensor
x = torch.from_numpy(x).clone()
y = torch.from_numpy(y).clone()
grads = {}
lr, lr_decay = 1e-2, 0.95
criterion = torch.nn.CrossEntropyLoss()
spike_ims, spike_axes, weight_im = None, None, None
for i, (x, y) in enumerate(zip(x.view(-1, 64), y)):
inputs = {'A': x.repeat(time, 1), 'E_b': torch.ones(time, 1)}
network.run(inputs=inputs, time=time)
y = torch.tensor(y).long()
spikes = {l: network.monitors[l].get('s') for l in network.layers}
summed_inputs = {l: network.layers[l].summed for l in network.layers}
output = spikes['E'].sum(-1).float().softmax(0).view(1, -1)
predicted = output.argmax(1).item()
y = torch.argmax(y, dim=-1)
grads['dl/df'] = summed_inputs['B'].softmax(0)
grads['dl/df'][y] -= 1
summed_inputs['A'] = torch.squeeze(summed_inputs['A'], dim=0)
grads['dl/df'] = torch.squeeze(grads['dl/df'], dim=0)
grads['dl/dw'] = torch.ger(summed_inputs['A'], grads['dl/df'])
network.connections['A', 'B'].w -= lr * grads['dl/dw']
grads['dl/df'] = summed_inputs['C'].softmax(0)
grads['dl/df'][y] -= 1
summed_inputs['B'] = torch.squeeze(summed_inputs['B'], dim=0)
grads['dl/df'] = torch.squeeze(grads['dl/df'], dim=0)
grads['dl/dw'] = torch.ger(summed_inputs['B'], grads['dl/df'])
network.connections['B', 'C'].w -= lr * grads['dl/dw']
grads['dl/df'] = summed_inputs['D'].softmax(0)
grads['dl/df'][y] -= 1
summed_inputs['C'] = torch.squeeze(summed_inputs['C'], dim=0)
grads['dl/df'] = torch.squeeze(grads['dl/df'], dim=0)
grads['dl/dw'] = torch.ger(summed_inputs['C'], grads['dl/df'])
network.connections['C', 'D'].w -= lr * grads['dl/dw']
grads['dl/df'] = summed_inputs['E'].softmax(0)
grads['dl/df'][y] -= 1
summed_inputs['D'] = torch.squeeze(summed_inputs['D'], dim=0)
grads['dl/df'] = torch.squeeze(grads['dl/df'], dim=0)
grads['dl/dw'] = torch.ger(summed_inputs['D'], grads['dl/df'])
network.connections['D', 'E'].w -= lr*grads['dl/dw']
if i > 0 and i % 300 == 0:
lr = lr_decay
network.reset_()
error message
Traceback (most recent call last):
File "C:/Users/name/Desktop/myo-python-1.0.4/bindsnet-master/bindsnet/preRSNN.py", line 126, in <module>
network.reset_()
File "C:\Python36\lib\site-packages\torch\nn\modules\module.py", line 772, in __getattr__
type(self).__name__, name))
torch.nn.modules.module.ModuleAttributeError: 'Network' object has no attribute 'reset_'