-
-
Save madhephaestus/0e6743c0e58d1017f631 to your computer and use it in GitHub Desktop.
Bowler wAIlnut Noise Invariance Test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import java.io.File; | |
| import java.io.IOException; | |
| import java.util.HashSet; | |
| import java.util.Set; | |
| import org.eclipse.jgit.api.errors.GitAPIException; | |
| import org.eclipse.jgit.api.errors.InvalidRemoteException; | |
| import org.eclipse.jgit.api.errors.TransportException; | |
| import com.neuronrobotics.bowlerstudio.scripting.ScriptingEngine; | |
| import com.neuronrobotics.imageprovider.AbstractImageProvider; | |
| import com.neuronrobotics.sdk.common.BowlerAbstractDevice; | |
| import model.MARK_II.connectTypes.AbstractSensorCellsToRegionConnect; | |
| import model.MARK_II.connectTypes.SensorCellsToRegionRectangleConnect; | |
| import model.MARK_II.generalAlgorithm.ColumnPosition; | |
| import model.MARK_II.generalAlgorithm.SpatialPooler; | |
| import model.MARK_II.region.Region; | |
| import model.MARK_II.sensory.Retina; | |
| /** | |
| * -------------------------------Purpose--------------------------------------- | |
| * To show the spatial pooling learning algorithm is good at producing the same | |
| * output of neural activity even when the input is very noisy. | |
| * | |
| * ------------------------------Experiment------------------------------------- | |
| * Run the spatial pooling algorithm on 3 different bitmap images. The 3 images | |
| * are both of the same thing but 1 of the images has no noise, 1 image has some | |
| * noise, and 1 image has a lot of noise. | |
| * | |
| * ------------------------------Conclusion------------------------------------- | |
| * The spatial pooling algorithm does simple local computations on it's input to | |
| * remove noise very efficiently up to a specific threshold that can vary | |
| * between locations in the input. | |
| * | |
| * @author Quinn Liu ([email protected]), edited by Paula Rudy (Github: PaulaRudy) | |
| * to work with BowlerStudio (http://neuronrobotics.com) | |
| */ | |
| File two = null,twoSomeNoise = null,twoLotsOfNoise = null; | |
| try { | |
| ScriptingEngine.setAutoupdate(true); | |
| two = ScriptingEngine | |
| .fileFromGit( | |
| "https://github.com/PaulaRudy/MQPResources.git",//git repo URL | |
| "master",//branch | |
| "2.bmp"// File from within the Git repo | |
| ); | |
| twoSomeNoise = ScriptingEngine | |
| .fileFromGit( | |
| "https://github.com/PaulaRudy/MQPResources.git",//git repo URL | |
| "master",//branch | |
| "2_with_some_noise.bmp"// File from within the Git repo | |
| ); | |
| twoLotsOfNoise = ScriptingEngine | |
| .fileFromGit( | |
| "https://github.com/PaulaRudy/MQPResources.git",//git repo URL | |
| "master",//branch | |
| "2_with_a_lot_of_noise.bmp"// File from within the Git repo | |
| ); | |
| } catch (InvalidRemoteException e1) { | |
| e1.printStackTrace(); | |
| } catch (TransportException e1) { | |
| e1.printStackTrace(); | |
| } catch (GitAPIException e1) { | |
| e1.printStackTrace(); | |
| } catch (IOException e1) { | |
| e1.printStackTrace(); | |
| } | |
| SpatialPooler spatialPooler; | |
| Retina retina = new Retina(66, 66); | |
| Region region = new Region("Region name", 8, 8, 1, 65, 2); | |
| region.setInhibitionRadius(3); | |
| AbstractSensorCellsToRegionConnect retinaToRegion = new SensorCellsToRegionRectangleConnect(); | |
| retinaToRegion.connect(retina.getVisionCells(), region.getColumns(), 0, 0); | |
| spatialPooler = new SpatialPooler(region); | |
| spatialPooler.setLearningState(true); | |
| // create columns that should be in the sets | |
| ColumnPosition cp1 = new ColumnPosition(6, 5); | |
| ColumnPosition cp2 = new ColumnPosition(6, 2); | |
| ColumnPosition cp3 = new ColumnPosition(2, 5); | |
| ColumnPosition cp4 = new ColumnPosition(1, 5); | |
| // create a set to test against the first two images | |
| Set<ColumnPosition> set1 = new HashSet<ColumnPosition>(); | |
| set1.add(cp1); | |
| set1.add(cp2); | |
| set1.add(cp3); | |
| set1.add(cp4); | |
| // set to use for the final image | |
| Set<ColumnPosition> set2 = new HashSet<ColumnPosition>(); | |
| set2.add(cp3); | |
| set2.add(cp4); | |
| // View all three images of digit 2 @ https://github.com/WalnutiQ/WalnutiQ#noise-invariance-experiment | |
| try { | |
| retina.seeBMPImage(two); | |
| } catch (IOException e) { | |
| e.printStackTrace(); | |
| } | |
| spatialPooler.performPooling(); | |
| // set1 = ((6, 5), (6, 2), (2, 5), (1, 5)) | |
| System.out.println(set1.equals(spatialPooler.getActiveColumnPositions())); | |
| try { | |
| retina.seeBMPImage(twoSomeNoise); | |
| } catch (IOException e) { | |
| e.printStackTrace(); | |
| } | |
| spatialPooler.performPooling(); | |
| // set1 = ((6, 5), (6, 2), (2, 5), (1, 5)) | |
| System.out.println(set1.equals(spatialPooler.getActiveColumnPositions())); | |
| try { | |
| retina.seeBMPImage(twoLotsOfNoise); | |
| } catch (IOException e) { | |
| e.printStackTrace(); | |
| } | |
| spatialPooler.performPooling(); | |
| // when there is a lot of noise notice how the active columns are no longer the same? | |
| // set2 = ((2, 5), (1, 5)) | |
| System.out.println(set2.equals(spatialPooler.getActiveColumnPositions())); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment