If it has the space to represent it separately and settings like boosting cause weak columns to become greedy then yes otherwise no.
Ian On Mar 5, 2014 3:09 PM, "Chetan Surpur" <[email protected]> wrote: > So, the spatial pooler doesn't offer spatial invariance because it's > pooling together "similar" inputs where similar means having overlapping > bits...right? Therefore an image moved over by 1 pixel wouldn't have any > overlapping bits with its original, so it would look like a totally novel > input to the SP. > > > On Wed, Mar 5, 2014 at 3:05 PM, Ian Danforth <[email protected]>wrote: > >> You can get it from training data as well you just need a lot of it. >> >> You can also get invariance with hierarchy and convolutional training. >> On Mar 5, 2014 1:02 PM, "Chetan Surpur" <[email protected]> wrote: >> >>> Does general spatial invariance come as a result of temporal pooling + >>> saccades? If not, how would the CLA achieve it? >>> >>> >>> On Tue, Mar 4, 2014 at 1:03 PM, Subutai Ahmad <[email protected]>wrote: >>> >>>> Hi Traun, >>>> >>>> Your basic approach seems quite reasonable as a first step. I would >>>> definitely look at Kevin's tutorial in the link that Matt sent out as it >>>> might answer many of your questions about the class. (And don't use the >>>> oldpy implementation. :-) >>>> >>>> For doing classification, take a look at: >>>> >>>> py/nupic/algorithms/KNNClassifier.py >>>> >>>> There are some examples of using it here: >>>> >>>> tests/integration/py2/nupic/algorithms/knn_classifier_test/ >>>> >>>> It is lower level than the CLAClassifierRegion. For distance metrics, >>>> with SDRs we usually use an overlap distance metric (count the number of >>>> bits that are common) rather than Euclidean distance. If you are just using >>>> a spatial pooler it shouldn't matter too much, but it does matter a lot >>>> once you start using the temporal pooler. >>>> >>>> I think your assumptions about close matches are reasonable. You might >>>> not get an exact match unless the inputs are really really close. In >>>> particular, the spatial pooler won't do too well at learning general >>>> invariances (and it's not supposed to). For example, if you shift the image >>>> by one or two pixels you might get a very different output SDR. >>>> >>>> I expect you will have to understand and tune some of the parameters. I >>>> think you'll learn a lot in the process. >>>> >>>> Look forward to hearing more as you work on this! >>>> >>>> --Subutai >>>> >>>> >>>> >>>> On Tue, Mar 4, 2014 at 11:05 AM, Matthew Taylor <[email protected]>wrote: >>>> >>>>> Take a look at the links in this wiki we just created: >>>>> https://github.com/numenta/nupic/wiki/Introduction-to-the-Algorithms >>>>> >>>>> Kevin is working on a tutorial that might help you use the SP. >>>>> >>>>> --------- >>>>> Matt Taylor >>>>> OS Community Flag-Bearer >>>>> Numenta >>>>> >>>>> >>>>> On Mon, Mar 3, 2014 at 6:15 PM, Traun Leyden >>>>> <[email protected]>wrote: >>>>> >>>>>> >>>>>> I'm trying to figure out how to write a digit recognizer >>>>>> implementation using a spatial pooler and had a few questions. >>>>>> >>>>>> The data would be similar to mnist, but I would start with a much >>>>>> simpler data set. The input vector would be a 1d vector of 784 input >>>>>> elements that represented the 2d image array of 28x28 pixels. As a >>>>>> simplification, the elements of the vectors would be 0 or 1 (as opposed >>>>>> to >>>>>> greyscale values used in mnist). >>>>>> >>>>>> The data sets I was planning to use: >>>>>> >>>>>> * For training (online learning), I would create ideal versions of >>>>>> the 0-9 digits >>>>>> >>>>>> * For testing (eg, online learning turned off), I would create noisy >>>>>> versions of those same digits >>>>>> >>>>>> >>>>>> The approach I was planning to take: >>>>>> >>>>>> 1) Create a spatial pooler instance >>>>>> >>>>>> 2) Turn on online learning >>>>>> >>>>>> 3) Repeatedly present ideal input vectors of 0-9 to the spatial pooler >>>>>> >>>>>> 4) Record the final SDR's of each input vector >>>>>> >>>>>> 5) Turn off online learning >>>>>> >>>>>> 6) Present noisy input vectors of 0-9 to the spatial pooler >>>>>> >>>>>> 7) Find the "closest" SDR recorded in step 4, and consider that the >>>>>> inferred SDR of the spatial pooler. I would compare the inferred SDR >>>>>> with >>>>>> a known expected SDR, which would be used to calculate the overall error. >>>>>> >>>>>> >>>>>> Does that sound like a reasonable approach? If not, what's a >>>>>> recommended approach to go about building a simple digit recognizer using >>>>>> the spatial pooler? >>>>>> >>>>>> Also I had some specific questions about how to use a spatial pooler: >>>>>> >>>>>> * Are there any examples that directly use a spatial pooler that I >>>>>> can look at? The closest I could find was >>>>>> https://github.com/allanino/nupic-classifier-mnist.git, but that >>>>>> uses OPF and I want to go straight to the lower level code and use the >>>>>> spatial pooler. >>>>>> >>>>>> * After looking at the code for the spatial pooler implementations, >>>>>> the "py" and "cpp" implementations don't seem to return any values. Only >>>>>> the "oldpy" implementation seemed to return a list of the active columns. >>>>>> Here's the method signature of the cpp spatial pooler I'm looking at in >>>>>> spatial_pooler.cpp: void SpatialPooler::compute(UInt inputArray[], bool >>>>>> learn, UInt activeArray[]) { } If they don't return any values, how are >>>>>> they supposed to be used? >>>>>> >>>>>> * Is there anything special to do with regards to recognizing 2d >>>>>> image patterns? Or will the columns naturally form 2d receptive fields >>>>>> of >>>>>> the input vector? >>>>>> >>>>>> * Since I want to basically classify digits, should I be looking at >>>>>> the CLAClassifierRegion for guidance? The idea I came up with for >>>>>> comparing the SDR's feels a bit janky, and it seems like there should be >>>>>> a >>>>>> cleaner way. Eg, something helps take care of the classification work >>>>>> but >>>>>> that's still lower level than the OPF? >>>>>> >>>>>> * I am expecting to see exact matches for SDR's when presenting input >>>>>> vectors that only have a little bit of noise, and "close" matches for >>>>>> input >>>>>> vectors that have a lot of noise. Is this a correct assumption? Is >>>>>> there >>>>>> any built-in machinery for measuring how close two SDR's are to each >>>>>> other? >>>>>> >>>>>> >>>>>> Thanks in advance for any help, I'm really excited to get started >>>>>> building this. I'm planning to contribute it back in a pull request once >>>>>> it's working. >>>>>> >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> nupic mailing list >>>>>> [email protected] >>>>>> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org >>>>>> >>>>>> >>>>> >>>>> _______________________________________________ >>>>> nupic mailing list >>>>> [email protected] >>>>> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org >>>>> >>>>> >>>> >>>> _______________________________________________ >>>> nupic mailing list >>>> [email protected] >>>> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org >>>> >>>> >>> >>> _______________________________________________ >>> nupic mailing list >>> [email protected] >>> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org >>> >>> >> _______________________________________________ >> nupic mailing list >> [email protected] >> http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org >> >> > > _______________________________________________ > nupic mailing list > [email protected] > http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org > >
_______________________________________________ nupic mailing list [email protected] http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org
