fangwei123456 / spikingjelly

SpikingJelly is an open-source deep learning framework for Spiking Neural Network (SNN) based on PyTorch.
https://spikingjelly.readthedocs.io
Other
1.24k stars 235 forks source link

使用NonSpikingLifNode进行强化学习任务不收敛 #492

Closed Taotaonoangry closed 5 months ago

Taotaonoangry commented 5 months ago

您好,我想使用SNN来实现玩Pong这个游戏,原始的ANN网络运行良好能够收敛。但当我使用教程所示的SNN网络时,发现网络无论如何都不收敛。 网络结构如下: class DQSN(nn.Module): def init(self, n_observations, n_actions, T=4): super(DQSN, self).init() self.layer = nn.Sequential( layer.Conv2d(n_observations, 32, kernel_size=8, stride=4), neuron.IFNode(), layer.Conv2d(32, 64, kernel_size=4, stride=2), neuron.IFNode(), layer.Conv2d(64, 64, kernel_size=3, stride=1), neuron.IFNode(), layer.Flatten(), layer.Linear(7 7 64, 512), layer.Linear(512, n_actions), NonSpikingLIFNode(tau=2.0) ) self.T = T

def forward(self, x):
    for t in range(self.T):
        self.layer(x)
    return self.layer[-1].v

 超参数如下:

BATCH_SIZE = 256 GAMMA = 0.99 EPS_START = 1 EPS_END = 0.01 EPS_DECAY = 1000 TAU = 0.005 LR = 1e-4 并且我已经在前向传播后将网络重置

lucifer2859 commented 5 months ago

Pong相对学习难度较大,在部分seed下容易出现不收敛的情况,建议先在类似Breakout的其他游戏上试试,看看是不是强化学习算法实现的问题(PS:线性层之间也需要IF神经元)