update tests

This commit is contained in:
Cathie So
2022-12-09 12:16:13 +08:00
parent 0a0c3a710f
commit 05bf4645d0
7 changed files with 130 additions and 78 deletions

View File

@@ -1,5 +1,4 @@
const chai = require("chai");
const { Console } = require("console");
const path = require("path");
const wasm_tester = require("circom_tester").wasm;
@@ -34,10 +33,18 @@ describe("AveragePooling2D layer test", function () {
assert(Fr.eq(Fr.e(witness[0]),Fr.e(1)));
for (var i=0; i<2*2*3; i++) {
assert((witness[i+1]-Fr.e(OUTPUT.out[i]))<Fr.e(500));
assert((Fr.e(OUTPUT.out[i])-witness[i+1])<Fr.e(500));
let ape = 0;
for (var i=0; i<OUTPUT.out.length; i++) {
console.log("actual", OUTPUT.out[i], "predicted", Fr.toString(witness[i+1]));
ape += Math.abs((OUTPUT.out[i]-parseInt(Fr.toString(witness[i+1])))/OUTPUT.out[i]);
}
const mape = ape/OUTPUT.out.length;
console.log("mean absolute % error", mape);
assert(mape < 0.01);
});
// AveragePooling with strides!=poolSize
@@ -55,9 +62,17 @@ describe("AveragePooling2D layer test", function () {
assert(Fr.eq(Fr.e(witness[0]),Fr.e(1)));
for (var i=0; i<4*4*3; i++) {
assert((witness[i+1]-Fr.e(OUTPUT.out[i]))<Fr.e(1000));
assert((Fr.e(OUTPUT.out[i])-witness[i+1])<Fr.e(1000));
let ape = 0;
for (var i=0; i<OUTPUT.out.length; i++) {
console.log("actual", OUTPUT.out[i], "predicted", Fr.toString(witness[i+1]));
ape += Math.abs((OUTPUT.out[i]-parseInt(Fr.toString(witness[i+1])))/OUTPUT.out[i]);
}
const mape = ape/OUTPUT.out.length;
console.log("mean absolute % error", mape);
assert(mape < 0.01);
});
});

View File

@@ -1,5 +1,4 @@
const chai = require("chai");
const { Console } = require("console");
const path = require("path");
const wasm_tester = require("circom_tester").wasm;
@@ -22,27 +21,35 @@ describe("BatchNormalization layer test", function () {
const circuit = await wasm_tester(path.join(__dirname, "circuits", "batchNormalization_test.circom"));
const a = [];
const b = [];
let INPUT = {};
for (var i=0; i<json.a.length; i++) {
a.push(Fr.e(json.a[i]));
b.push(Fr.e(json.b[i]));
}
const INPUT = {
"in": json.in,
"a": a,
"b": b
for (const [key, value] of Object.entries(json)) {
if (Array.isArray(value)) {
let tmpArray = [];
for (let i = 0; i < value.flat().length; i++) {
tmpArray.push(Fr.e(value.flat()[i]));
}
INPUT[key] = tmpArray;
} else {
INPUT[key] = Fr.e(value);
}
}
const witness = await circuit.calculateWitness(INPUT, true);
assert(Fr.eq(Fr.e(witness[0]),Fr.e(1)));
for (var i=0; i<5*5*3; i++) {
assert((witness[i+1]-Fr.e(OUTPUT.out[i]))<Fr.e(1000));
assert((Fr.e(OUTPUT.out[i])-witness[i+1])<Fr.e(1000));
let ape = 0;
for (var i=0; i<OUTPUT.out.length; i++) {
// console.log("actual", OUTPUT.out[i], "predicted", Fr.toString(witness[i+1]));
ape += Math.abs((OUTPUT.out[i]-parseInt(Fr.toString(witness[i+1])))/OUTPUT.out[i]);
}
const mape = ape/OUTPUT.out.length;
console.log("mean absolute % error", mape);
assert(mape < 0.01);
});
});

View File

@@ -1,5 +1,4 @@
const chai = require("chai");
const { Console } = require("console");
const path = require("path");
const wasm_tester = require("circom_tester").wasm;
@@ -41,9 +40,17 @@ describe("Conv1D layer test", function () {
assert(Fr.eq(Fr.e(witness[0]),Fr.e(1)));
for (var i=0; i<6*2; i++) {
assert((witness[i+1]-Fr.e(OUTPUT.out[i]))<Fr.e(5000));
assert((Fr.e(OUTPUT.out[i])-witness[i+1])<Fr.e(5000));
let ape = 0;
for (var i=0; i<OUTPUT.out.length; i++) {
// console.log("actual", OUTPUT.out[i], "predicted", Fr.toString(witness[i+1]));
ape += Math.abs((OUTPUT.out[i]-parseInt(Fr.toString(witness[i+1])))/OUTPUT.out[i]);
}
const mape = ape/OUTPUT.out.length;
console.log("mean absolute % error", mape);
assert(mape < 0.01);
});
});

View File

@@ -1,5 +1,4 @@
const chai = require("chai");
const { Console } = require("console");
const path = require("path");
const wasm_tester = require("circom_tester").wasm;
@@ -21,30 +20,37 @@ describe("Conv2D layer test", function () {
let OUTPUT = require("../models/conv2D_output.json");
const circuit = await wasm_tester(path.join(__dirname, "circuits", "Conv2D_test.circom"));
//await circuit.loadConstraints();
//assert.equal(circuit.nVars, 618);
//assert.equal(circuit.constraints.length, 486);
let INPUT = {};
const weights = [];
for (var i=0; i<json.weights.length; i++) {
weights.push(Fr.e(json.weights[i]));
}
const INPUT = {
"in": json.in,
"weights": weights,
"bias": ["0","0"]
for (const [key, value] of Object.entries(json)) {
if (Array.isArray(value)) {
let tmpArray = [];
for (let i = 0; i < value.flat().length; i++) {
tmpArray.push(Fr.e(value.flat()[i]));
}
INPUT[key] = tmpArray;
} else {
INPUT[key] = Fr.e(value);
}
}
const witness = await circuit.calculateWitness(INPUT, true);
assert(Fr.eq(Fr.e(witness[0]),Fr.e(1)));
for (var i=0; i<3*3*2; i++) {
assert((witness[i+1]-Fr.e(OUTPUT.out[i]))<Fr.e(5000));
assert((Fr.e(OUTPUT.out[i])-witness[i+1])<Fr.e(5000));
let ape = 0;
for (var i=0; i<OUTPUT.out.length; i++) {
// console.log("actual", OUTPUT.out[i], "predicted", Fr.toString(witness[i+1]));
ape += Math.abs((OUTPUT.out[i]-parseInt(Fr.toString(witness[i+1])))/OUTPUT.out[i]);
}
const mape = ape/OUTPUT.out.length;
console.log("mean absolute % error", mape);
assert(mape < 0.01);
});
it("(10,10,3) -> (3,3,2)", async () => {
@@ -52,29 +58,36 @@ describe("Conv2D layer test", function () {
let OUTPUT = require("../models/conv2D_stride_output.json");
const circuit = await wasm_tester(path.join(__dirname, "circuits", "Conv2D_stride_test.circom"));
//await circuit.loadConstraints();
//assert.equal(circuit.nVars, 618);
//assert.equal(circuit.constraints.length, 486);
let INPUT = {};
const weights = [];
for (var i=0; i<json.weights.length; i++) {
weights.push(Fr.e(json.weights[i]));
}
const INPUT = {
"in": json.in,
"weights": weights,
"bias": ["0","0"]
for (const [key, value] of Object.entries(json)) {
if (Array.isArray(value)) {
let tmpArray = [];
for (let i = 0; i < value.flat().length; i++) {
tmpArray.push(Fr.e(value.flat()[i]));
}
INPUT[key] = tmpArray;
} else {
INPUT[key] = Fr.e(value);
}
}
const witness = await circuit.calculateWitness(INPUT, true);
assert(Fr.eq(Fr.e(witness[0]),Fr.e(1)));
for (var i=0; i<3*3*2; i++) {
assert((witness[i+1]-Fr.e(OUTPUT.out[i]))<Fr.e(5000));
assert((Fr.e(OUTPUT.out[i])-witness[i+1])<Fr.e(5000));
let ape = 0;
for (var i=0; i<OUTPUT.out.length; i++) {
// console.log("actual", OUTPUT.out[i], "predicted", Fr.toString(witness[i+1]));
ape += Math.abs((OUTPUT.out[i]-parseInt(Fr.toString(witness[i+1])))/OUTPUT.out[i]);
}
const mape = ape/OUTPUT.out.length;
console.log("mean absolute % error", mape);
assert(mape < 0.01);
});
});

View File

@@ -1,5 +1,4 @@
const chai = require("chai");
const { Console } = require("console");
const path = require("path");
const wasm_tester = require("circom_tester").wasm;
@@ -29,10 +28,9 @@ describe("Flatten2D layer test", function () {
const witness = await circuit.calculateWitness(INPUT, true);
assert(Fr.eq(Fr.e(witness[0]),Fr.e(1)));
for (var i=0; i<75; i++) {
assert((witness[i+1]-Fr.e(OUTPUT.out[i]))<Fr.e(5000));
assert((Fr.e(OUTPUT.out[i])-witness[i+1])<Fr.e(5000));
for (var i=0; i<OUTPUT.out.length; i++) {
assert(Fr.eq(Fr.e(OUTPUT.out[i]), witness[i+1]));
}
});
});

View File

@@ -1,5 +1,4 @@
const chai = require("chai");
const { Console } = require("console");
const path = require("path");
const wasm_tester = require("circom_tester").wasm;
@@ -34,9 +33,8 @@ describe("MaxPooling2D layer test", function () {
assert(Fr.eq(Fr.e(witness[0]),Fr.e(1)));
for (var i=0; i<2*2*3; i++) {
assert((witness[i+1]-Fr.e(OUTPUT.out[i]))<Fr.e(1));
assert((Fr.e(OUTPUT.out[i])-witness[i+1])<Fr.e(1));
for (var i=0; i<OUTPUT.out.length; i++) {
assert(Fr.eq(Fr.e(OUTPUT.out[i]),witness[i+1]));
}
});
@@ -55,9 +53,8 @@ describe("MaxPooling2D layer test", function () {
assert(Fr.eq(Fr.e(witness[0]),Fr.e(1)));
for (var i=0; i<3*3*3; i++) {
assert((witness[i+1]-Fr.e(OUTPUT.out[i]))<Fr.e(1));
assert((Fr.e(OUTPUT.out[i])-witness[i+1])<Fr.e(1));
for (var i=0; i<OUTPUT.out.length; i++) {
assert(Fr.eq(Fr.e(OUTPUT.out[i]),witness[i+1]));
}
});
});

View File

@@ -1,5 +1,4 @@
const chai = require("chai");
const { Console } = require("console");
const path = require("path");
const wasm_tester = require("circom_tester").wasm;
@@ -34,10 +33,18 @@ describe("SumPooling2D layer test", function () {
assert(Fr.eq(Fr.e(witness[0]),Fr.e(1)));
for (var i=0; i<2*2*3; i++) {
assert((witness[i+1]-Fr.e(OUTPUT.out[i]))<Fr.e(2));
assert((Fr.e(OUTPUT.out[i])-witness[i+1])<Fr.e(2));
let ape = 0;
for (var i=0; i<OUTPUT.out.length; i++) {
// console.log("actual", OUTPUT.out[i], "predicted", Fr.toString(witness[i+1]));
ape += Math.abs((OUTPUT.out[i]-parseInt(Fr.toString(witness[i+1])))/OUTPUT.out[i]);
}
const mape = ape/OUTPUT.out.length;
console.log("mean absolute % error", mape);
assert(mape < 0.01);
});
// SumPooling with strides!=poolSize
@@ -55,9 +62,17 @@ describe("SumPooling2D layer test", function () {
assert(Fr.eq(Fr.e(witness[0]),Fr.e(1)));
for (var i=0; i<3*3*3; i++) {
assert((witness[i+1]-Fr.e(OUTPUT.out[i]))<Fr.e(3));
assert((Fr.e(OUTPUT.out[i])-witness[i+1])<Fr.e(3));
let ape = 0;
for (var i=0; i<OUTPUT.out.length; i++) {
// console.log("actual", OUTPUT.out[i], "predicted", Fr.toString(witness[i+1]));
ape += Math.abs((OUTPUT.out[i]-parseInt(Fr.toString(witness[i+1])))/OUTPUT.out[i]);
}
const mape = ape/OUTPUT.out.length;
console.log("mean absolute % error", mape);
assert(mape < 0.01);
});
});