Beispiel #1
0
  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)
Beispiel #2
0
    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)
Beispiel #3
0
  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)