mirror of
https://github.com/socathie/circomlib-ml.git
synced 2026-01-07 21:24:01 -05:00
update tests
This commit is contained in:
@@ -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);
|
||||
});
|
||||
});
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
@@ -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]));
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -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]));
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user