return [ And( [ And( X[j] >= X[i], Y[j] >= Y[i] ) for i in range(n) if i != j ] ) for j in range(n) ] OutX = core.vmmul(InX, W, B, l0_n, l1_n, "none") OutY = core.vmmul(InY, W, B, l0_n, l1_n, "none") input_cond = [ And(0 <= InY[i], InY[i] <= 1, 0 <= InX[i], InX[i] <= 1) for i in range(l0_n) ] robust_cond = robustCNF(OutX, OutY, l1_n) # OR these together output_cond = [ Not(robust_cond[i]) for i in range(l1_n) ] s = Solver() s.add(input_cond) #print "[add] %d asts now" % (len(s.assertions())) result = core.solveIt(s) for index, out_cond in enumerate(output_cond): print "Adding constraint %d from output layer" % index s.add(out_cond) #print "[add] %d asts now" % (len(s.assertions())) result = core.solveIt(s) if (result == unsat): break; if (result == sat): m = s.model() outx = [m.evaluate(OutX[i]) for i in range(l1_n)] outy = [m.evaluate(OutY[i]) for i in range(l1_n)] print "OutX", outx print "OutY", outy print "argmax(OutX)", core.argmax(outx) print "argmax(OutY)", core.argmax(outy) core.genCounterExp('/tmp/softmax_mnist_conv.csv', m, InX, InY)
inputs = np.genfromtxt('../mnist/para/mnist_test_images_unscaled_100.csv', delimiter=',') X = [ IntVal(inputs[input_id][i]) for i in range(l0_n) ] InX = core.scaleInput(X, scale, l0_n) else: X = [ Int('x%s' % i) for i in range(l0_n) ] InX = core.scaleInput(X, scale, l0_n) Y = [ Int('y%s' % i) for i in range(l0_n) ] InY = core.scaleInput(Y, scale, l0_n) OutX = core.vmmul(InX, W, B, l0_n, l1_n, "none") OutY = core.vmmul(InY, W, B, l0_n, l1_n, "none") if input_scaled == "scaled": input_cond = [ And(InX[i] - InY[i] < input_var, InY[i] - InX[i] < input_var, 0 <= InY[i], InY[i] <= 1, 0 <= InX[i], InX[i] <= 1) for i in range(l0_n) ] else: input_cond = [ And(X[i] - Y[i] < input_var, Y[i] - X[i] < input_var, 0 <= Y[i], Y[i] <= 255, 0 <= X[i], X[i] <= 255) for i in range(l0_n) ] output_cond = [ Not( core.full_robust(OutX, OutY, l1_n, robust_cons, bound=output_bound) ) ] s = Solver() s.add(input_cond + output_cond) result = core.solveIt(s) if (result == sat): m = s.model() outx = [m.evaluate(OutX[i]) for i in range(l1_n)] outy = [m.evaluate(OutY[i]) for i in range(l1_n)] print "OutX", outx print "OutY", outy print "argmax(OutX)", core.argmax(outx) print "argmax(OutY)", core.argmax(outy) core.genCounterExp('/tmp/temp.csv', m, InX, InY)
else: s.push() for index, cond in enumerate(cond1 + cond2): if (index < l1_n): print "Adding constraint %d from hidden layer 1" % index else: print "Adding constraint %d from hidden layer 2" % index s.add(cond) print "[push] %d asts now" % (len(s.assertions())) result = core.solveIt(s) if (result == unsat): break s.pop() print "[pop] %d asts now" % (len(s.assertions())) s.pop() print "[pop] %d asts now" % (len(s.assertions())) if (result == sat): break; if (result == unsat): print "Model is robust on image %d against perturbation %f!" % (input_id, input_var) else: m = s.model() outx = [simplify(OutX[i]) for i in range(l3_n)] outy = [m.evaluate(OutY[i]) for i in range(l3_n)] print "OutX", outx print "OutY", outy print "argmax(OutX)", core.argmax(outx) print "argmax(OutY)", core.argmax(outy) core.genCounterExp('/tmp/dnn_mnist_ref.csv', m, InX, InY)