New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add 'htm.java' detector #237
Merged
Merged
Changes from 13 commits
Commits
Show all changes
24 commits
Select commit
Hold shift + click to select a range
7e4a236
Add 'htm.java' detector
lscheinkman 45c264c
Simplify network removing unnecessary layers
lscheinkman 001b3eb
Use new 'tm_cpp' parameters
lscheinkman 48388db
Add extra logging and debugging options
lscheinkman ff474a1
Merge remote-tracking branch 'upstream/master' into htm.java
lscheinkman 1008111
Update to new Persistence API (PublisherSupplier)
lscheinkman c3577bd
Merge branch 'htm.java' of https://github.com/lscheinkman/NAB into ls…
mrcslws 4fff66a
Latest htmjava detector from @cogmission
mrcslws cc2855e
Use correct input dimensions and potentialRadius
mrcslws 9a10324
Add htmjava results
mrcslws a6c2602
Link to htmjava github issue
mrcslws 08d0935
Merge remote-tracking branch 'upstream/master' into htm.java
lscheinkman 38d7c0a
Update README
lscheinkman 7e52016
Unpublish HTM Java results
lscheinkman eb6fc08
Slight cleanup: scores same as numentaTM
db91358
Revert "Unpublish HTM Java results"
lscheinkman 0aed2f3
Change build to use new HTM.Java release, and remove explicit potenti…
7b594cf
Merge branch 'htm.java' of https://github.com/lscheinkman/NAB into ht…
ddf61ee
merge with upstream, resubmit scoring
bf2de21
Add former results dir back in with modified files
2af503f
Restore other results
lscheinkman 98003f8
Merge remote-tracking branch 'upstream/master' into htm.java
lscheinkman 8b5f0d4
Adds spatial detection that improves HTM scores. See PR #284
lscheinkman 08fc1aa
Sort table via “standard profile” scores
lscheinkman File filter
Filter by extension
Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,6 +5,7 @@ | |
data_test/ | ||
deprecated/ | ||
nab.egg-info/ | ||
.idea/ | ||
|
||
# Generated files | ||
|
||
|
This file contains 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
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
.gradle | ||
build | ||
/bin/ | ||
.classpath | ||
.project | ||
.settings | ||
.idea |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
## [HTM Java](https://github.com/numenta/htm.java) NAB detector | ||
|
||
##### Run [htm.java](https://github.com/numenta/htm.java) with NAB | ||
|
||
First make sure you have __java 8__ installed | ||
|
||
java -version | ||
|
||
Build __htm.java__ NAB detector: | ||
|
||
cd nab/detectors/htmjava | ||
./gradlew clean build | ||
|
||
Run __htm.java__ NAB detector: | ||
|
||
cd /path/to/nab | ||
python run.py -d htmjava --detect --score --normalize |
Empty file.
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
apply plugin: 'java' | ||
|
||
sourceCompatibility = 1.8 | ||
targetCompatibility = 1.8 | ||
archivesBaseName = 'htm.java-nab' | ||
|
||
|
||
repositories { | ||
mavenCentral() | ||
maven { | ||
url 'https://oss.sonatype.org/content/repositories/snapshots' | ||
} | ||
maven { | ||
url 'http://metaware.us/maven3' | ||
} | ||
} | ||
|
||
dependencies { | ||
compile group: 'org.numenta', name: 'htm.java', version: '0.6.9-SNAPSHOT' | ||
compile group: 'com.google.guava', name: 'guava', version: '19.0' | ||
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.10' | ||
compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.10' | ||
compile group: 'net.sf.jopt-simple', name: 'jopt-simple', version: '4.6' | ||
} | ||
|
||
jar { | ||
manifest { | ||
attributes 'Implementation-Title': 'NAB detector for htm.java', | ||
'Implementation-Version': '0.0.1', | ||
'Main-Class': 'nab.detectors.htmjava.HTMModel', | ||
'Class-Path': configurations.runtime.files.collect {"$it.name"}.join(' ') | ||
} | ||
} | ||
|
||
clean { | ||
delete fileTree(dir: '../../../' , include: 'htmjava.log') | ||
} | ||
|
||
task copyToLib(type: Copy) { | ||
into "$buildDir/libs" | ||
from configurations.runtime | ||
} | ||
assemble.dependsOn(copyToLib) |
Binary file not shown.
6 changes: 6 additions & 0 deletions
6
nab/detectors/htmjava/gradle/wrapper/gradle-wrapper.properties
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
#Sun Mar 27 18:56:14 PDT 2016 | ||
distributionBase=GRADLE_USER_HOME | ||
distributionPath=wrapper/dists | ||
zipStoreBase=GRADLE_USER_HOME | ||
zipStorePath=wrapper/dists | ||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-all.zip |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,164 @@ | ||
#!/usr/bin/env bash | ||
|
||
############################################################################## | ||
## | ||
## Gradle start up script for UN*X | ||
## | ||
############################################################################## | ||
|
||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||
DEFAULT_JVM_OPTS="" | ||
|
||
APP_NAME="Gradle" | ||
APP_BASE_NAME=`basename "$0"` | ||
|
||
# Use the maximum available, or set MAX_FD != -1 to use that value. | ||
MAX_FD="maximum" | ||
|
||
warn ( ) { | ||
echo "$*" | ||
} | ||
|
||
die ( ) { | ||
echo | ||
echo "$*" | ||
echo | ||
exit 1 | ||
} | ||
|
||
# OS specific support (must be 'true' or 'false'). | ||
cygwin=false | ||
msys=false | ||
darwin=false | ||
case "`uname`" in | ||
CYGWIN* ) | ||
cygwin=true | ||
;; | ||
Darwin* ) | ||
darwin=true | ||
;; | ||
MINGW* ) | ||
msys=true | ||
;; | ||
esac | ||
|
||
# For Cygwin, ensure paths are in UNIX format before anything is touched. | ||
if $cygwin ; then | ||
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` | ||
fi | ||
|
||
# Attempt to set APP_HOME | ||
# Resolve links: $0 may be a link | ||
PRG="$0" | ||
# Need this for relative symlinks. | ||
while [ -h "$PRG" ] ; do | ||
ls=`ls -ld "$PRG"` | ||
link=`expr "$ls" : '.*-> \(.*\)$'` | ||
if expr "$link" : '/.*' > /dev/null; then | ||
PRG="$link" | ||
else | ||
PRG=`dirname "$PRG"`"/$link" | ||
fi | ||
done | ||
SAVED="`pwd`" | ||
cd "`dirname \"$PRG\"`/" >&- | ||
APP_HOME="`pwd -P`" | ||
cd "$SAVED" >&- | ||
|
||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | ||
|
||
# Determine the Java command to use to start the JVM. | ||
if [ -n "$JAVA_HOME" ] ; then | ||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | ||
# IBM's JDK on AIX uses strange locations for the executables | ||
JAVACMD="$JAVA_HOME/jre/sh/java" | ||
else | ||
JAVACMD="$JAVA_HOME/bin/java" | ||
fi | ||
if [ ! -x "$JAVACMD" ] ; then | ||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | ||
Please set the JAVA_HOME variable in your environment to match the | ||
location of your Java installation." | ||
fi | ||
else | ||
JAVACMD="java" | ||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||
Please set the JAVA_HOME variable in your environment to match the | ||
location of your Java installation." | ||
fi | ||
|
||
# Increase the maximum file descriptors if we can. | ||
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then | ||
MAX_FD_LIMIT=`ulimit -H -n` | ||
if [ $? -eq 0 ] ; then | ||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then | ||
MAX_FD="$MAX_FD_LIMIT" | ||
fi | ||
ulimit -n $MAX_FD | ||
if [ $? -ne 0 ] ; then | ||
warn "Could not set maximum file descriptor limit: $MAX_FD" | ||
fi | ||
else | ||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" | ||
fi | ||
fi | ||
|
||
# For Darwin, add options to specify how the application appears in the dock | ||
if $darwin; then | ||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" | ||
fi | ||
|
||
# For Cygwin, switch paths to Windows format before running java | ||
if $cygwin ; then | ||
APP_HOME=`cygpath --path --mixed "$APP_HOME"` | ||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | ||
|
||
# We build the pattern for arguments to be converted via cygpath | ||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` | ||
SEP="" | ||
for dir in $ROOTDIRSRAW ; do | ||
ROOTDIRS="$ROOTDIRS$SEP$dir" | ||
SEP="|" | ||
done | ||
OURCYGPATTERN="(^($ROOTDIRS))" | ||
# Add a user-defined pattern to the cygpath arguments | ||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then | ||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" | ||
fi | ||
# Now convert the arguments - kludge to limit ourselves to /bin/sh | ||
i=0 | ||
for arg in "$@" ; do | ||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` | ||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option | ||
|
||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition | ||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` | ||
else | ||
eval `echo args$i`="\"$arg\"" | ||
fi | ||
i=$((i+1)) | ||
done | ||
case $i in | ||
(0) set -- ;; | ||
(1) set -- "$args0" ;; | ||
(2) set -- "$args0" "$args1" ;; | ||
(3) set -- "$args0" "$args1" "$args2" ;; | ||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;; | ||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | ||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | ||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | ||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | ||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | ||
esac | ||
fi | ||
|
||
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules | ||
function splitJvmOpts() { | ||
JVM_OPTS=("$@") | ||
} | ||
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS | ||
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" | ||
|
||
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Guys,
Can we please get HTM.Java's results = NuPIC before we post? Please take this down? There's no reason why HTM.Java's results have to be less than NuPIC, so why would we post these without optimizing it?
I don't have anything against the rest of the merge, I just would like to not include results until we optimize the performance so that it equals (or is very close or above even) NuPIC?
For instance, the scores I get with my HTMModel are even better than these, so I would rather not put these up until @lscheinkman or someone can optimize them? (I will help too) - I just would like to merge without the results part for now?
Here's a Gist link containing my HTMModel, and thresholds.json file for your convenience to help with optimizing... And these were my scores using this:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@cogmission Feel free to push your
HTMModel
changes and results to this PR. You should have access to it.I will not merge until you are satisfied with the results.
BTW, HTM Java implementation should be compared with NumentaTM HTM results which are pretty close right now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done. I've unpublished the current HTM Java results from the PR.
IMHO, we should not merge to master until we get results we can publish.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So who is going to own the work on the optimization? That is Numenta's "wheelhouse" not mine? Like I said, I will assist...