Conversation
|
See https://gitter.im/nengo/loihi-103 for some discussion points |
|
Rebased to #112 and reverted #85. I pushed the old branch to https://github.com/nengo/nengo-loihi/tree/fix-ks-saved. @tbekolay wrote a test and did some work there related to chip/host communication, but not directly related to the keyword demo, which we might want in the future. |
|
This LGTM but since I made the original PR I can't submit a review. Will find a scapegoat then merge. |
tcstewar
left a comment
There was a problem hiding this comment.
This looks good to me as well. I will note that @pblouw seems to have fixed the keyword spotting demo when the connections are on-chip, so this PR might not be needed, but in the long run we're going to want a more robust way of controlling where the connection weights reside anyway.
No longer transforms neuron connections into decoded connections. Raises an explicit NotImplementedError for learning rules on non-decoded connections.
@pblouw reported that his keyword spotting demo is broken in v0.3.0, and indeed our keyword spotting example is broken also. He tracked it down to this commit, which seems like it shouldn't even affect the keyword spotting network, but in fact it does.
The reason why that commit affects the keyword spotting network is that it translates all neuron->* connections in which
preis onchip andpostis offchip withtransform=weightsto asolver=NoSolver(weight.T)connection. This would be fine if those two connections made no difference to how the network behaves, but that is unfortunately not the case, as evidenced by the keyword spotting example failing.Investigating this issue is made more complicated by the fact that it is impossible to compare the two connection types because
transform=weightsconnections are translated toNoSolverconnections by the splitter. Commenting out this behavior in the splitter results in obvious differences between the two.One way we can still investigate this is in looking at neuron->* connections in which
preis offchip andpostis onchip, as this case was not handled in the same way as the reverse of that, sotransform=weightsconnections still act differently fromsolver=NoSolverconnections. This is definitely an oversight, but in this case a convenient one as it allowed me to write thetest_n2n_transform_solvertest in this PR.Running that test with the commit it's introduced in (9042d86) reveals some hard to debug issues. Thanks to the new
allclosechanges, here's the first bunch of failures when comparing a connections with a transform and a NoSolver:I attempted to fix this in splitter in f2ae792. I was not able to fix it (I find the
ChipReceiveNeuronsandHostSendNodestuff quite confusing), but looking at how it fails now gives me some hope:It looks like the
NoSolvercase might be operating the same as thetransformcase, only 6 timesteps delayed. We should make them the same, but seeing as I tried to do that here, I think I will need help to do that.Also, even if we fix this case, it doesn't fix the keyword spotting example. However, it might give us a bit of insight into why the switch from the
transformconnection to theNoSolverconnection made a difference. Does the way we did the connection splitting in 0811e2a have the same weird issue as in 9042d86, or is it simply delayed by some timesteps? My guess is that having several timesteps delay would not cause the keyword spotting example to change in the way that it changed, so I think we need to revisit the change in 0811e2a and ensure that switching the type of connection doesn't change behavior.