Skip to content

Commit a55e6f4

Browse files
Merge pull request #241 from BrainJS/217-unrecognized-handler
Provide fix for #217 unrecognized handler
2 parents 2727591 + 4b88deb commit a55e6f4

File tree

10 files changed

+14509
-13489
lines changed

10 files changed

+14509
-13489
lines changed

browser.js

Lines changed: 14353 additions & 13384 deletions
Large diffs are not rendered by default.

browser.min.js

Lines changed: 107 additions & 96 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/recurrent/rnn.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/recurrent/rnn.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/utilities/data-formatter.js

Lines changed: 16 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/utilities/data-formatter.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "brain.js",
33
"description": "Neural network library",
4-
"version": "1.2.2",
4+
"version": "1.2.3",
55
"author": "Heather Arthur <[email protected]>",
66
"repository": {
77
"type": "git",

src/recurrent/rnn.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,7 @@ RNN.defaults = {
766766
values.push(data[i].output);
767767
}
768768
this.dataFormatter = DataFormatter.fromArrayInputOutput(values);
769+
this.dataFormatter.addUnrecognized();
769770
}
770771
for (let i = 0, max = data.length; i < max; i++) {
771772
result.push(this.formatDataIn(data[i].input, data[i].output));

src/utilities/data-formatter.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,11 @@ export default class DataFormatter {
6060
let character = value[i];
6161
let index = indexTable[character];
6262
if (index === undefined) {
63-
throw new Error(`unrecognized character "${ character }"`);
63+
if (indexTable['unrecognized']) {
64+
index = indexTable['unrecognized'];
65+
} else {
66+
throw new Error(`unrecognized character "${ character }"`);
67+
}
6468
}
6569
if (index < maxThreshold) continue;
6670
result.push(index);
@@ -87,15 +91,20 @@ export default class DataFormatter {
8791
}
8892

8993
toCharacters(indices, maxThreshold = 0) {
90-
let result = [];
91-
let characterTable = this.characterTable;
94+
const result = [];
95+
const characterTable = this.characterTable;
96+
const indexTable = this.indexTable;
9297

9398
for (let i = 0, max = indices.length; i < max; i++) {
9499
let index = indices[i];
95100
if (index < maxThreshold) continue;
96101
let character = characterTable[index];
97102
if (character === undefined) {
98-
throw new Error(`unrecognized index "${ index }"`);
103+
if (indexTable['unrecognized']) {
104+
character = characterTable[indexTable['unrecognized']];
105+
} else {
106+
throw new Error(`unrecognized index "${ index }"`);
107+
}
99108
}
100109
result.push(character);
101110
}
@@ -112,6 +121,10 @@ export default class DataFormatter {
112121
this.addSpecial('start-output');
113122
}
114123

124+
addUnrecognized() {
125+
this.addSpecial('unrecognized');
126+
}
127+
115128
static fromAllPrintable(maxThreshold, values = ['\n']) {
116129
for(let i = 32; i <= 126; i++) {
117130
values.push(String.fromCharCode(i));

test/recurrent/rnn.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,17 @@ describe('rnn', () => {
3535
net.runBackpropagate([1, 1, 0]);
3636
assert(net.model.input.deltas.some(notZero));
3737
});
38+
it('can handle unrecognized input characters', () => {
39+
var net = new RNN({ hiddenSizes: [3] });
40+
net.train([
41+
{ input: '1', output: '2' },
42+
{ input: '2', output: '3' },
43+
]);
44+
45+
assert.doesNotThrow(() => {
46+
net.run('7');
47+
});
48+
});
3849
});
3950
describe('xor', () => {
4051
function xorNet() {

0 commit comments

Comments
 (0)