Deep learning에서는 대부분 one-hot-vector로 학습을 수행하는데, 이를 neuron으로 표현하기는 까다로울 수 있다.
그래서 one-hot-vector에 반응하는 one-hot-neuron을 만들어보쟈!
우선 간단한 one-hot-vector를 return하는 함수를 만들어보자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import numpy as np import matplotlib.pyplot as plt %matplotlib inline import nengo from nengo.dists import Choice from nengo.utils.ensemble import tuning_curves from nengo.utils.matplotlib import rasterplot def input_one_hot(t): if(t % 1 == 0): if(t % 2 == 0): return 1 else: return 0 else: return 0 | cs |
simulation이 도는 시간에 따라, 짝수 초 마다 1을 return하는 함수를 만들었다.
실제로 def input_one_hot은 나중에 one-hot-vector 정보를 return하는 함수로 작성하면 될 것이다.
중요한 것은, Nengo simulation은 시간 단위로 input을 받는다는 것이다.
1 2 3 4 5 6 7 8 9 10 11 | model = nengo.Network() with model: input_node = nengo.Node(output=input_one_hot) ens_neuron = nengo.Ensemble(1, dimensions=1, max_rates = [100], intercepts=[0]) ens_neuron.encoders = Choice([[1]]) nengo.Connection(input_node, ens_neuron.neurons) input_p = nengo.Probe(input_node) spike_p = nengo.Probe(ens_neuron.neurons) | cs |
여기서 neuron의 경우에 1로 반환하는 encoder를 붙여준다.
주의할 점은 꼭 ensemble.neurons로 해야 개별 neuron에 input node가 붙는다!
1 2 3 4 5 6 7 | with nengo.Simulator(model) as sim: eval_points, activities = tuning_curves(ens_neuron, sim) plt.figure() plt.plot(eval_points, activities) plt.ylabel("Firing rate (Hz)") plt.xlabel("Input scalar, x"); | cs |
0 이상의 값에서 firing rate가 증가하는 neuron이 만들어졌다.
10초의 simulation을 돌려보자
1 2 3 4 5 6 7 8 | with nengo.Simulator(model) as sim: sim.run(10.0) plt.figure(figsize=(12, 8)) plt.subplot(2, 1, 1) plt.plot(sim.trange(), sim.data[input_p]) plt.subplot(2, 1, 2) rasterplot(sim.trange(), sim.data[spike_p]) | cs |
input은 짝수 초마다 1의 값을 반환하고, neuron은 1의 값을 받아 발화가 잘 일어난다~
참고: https://www.nengo.ai/nengo/examples/advanced/functions_and_tuning_curves.html
'Deep Learning Tools > Nengo' 카테고리의 다른 글
[작성 중] Neuron의 backpropagation과 supervised learning (0) | 2019.04.08 |
---|---|
Nengo에서 PES learning을 이용해 supervised learning 구현해보기 (0) | 2018.11.30 |
Nengo synapse에 PES learning 적용 예제 (0) | 2018.11.26 |
Prescribed Error Sensitivity (PES) learning rule (0) | 2018.11.10 |
Bienenstock, Cooper, and Munro (BCM) learning rule (0) | 2018.11.10 |