Closed Taotaonoangry closed 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 并且我已经在前向传播后将网络重置
Pong相对学习难度较大,在部分seed下容易出现不收敛的情况,建议先在类似Breakout的其他游戏上试试,看看是不是强化学习算法实现的问题(PS:线性层之间也需要IF神经元)
您好,我想使用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
BATCH_SIZE = 256 GAMMA = 0.99 EPS_START = 1 EPS_END = 0.01 EPS_DECAY = 1000 TAU = 0.005 LR = 1e-4 并且我已经在前向传播后将网络重置