def testOneSample(x, y, epsilon, grad_th, coeff, sbst, sbst_model, Oracle, Oracle_model, sbst_pred, Oracle_pred): print('Test on a sample with true label ',y) X_adv = FastGradSign_h1(x, epsilon, grad_th, sbst) #X_adv = Opt_L_BFGS_h1(x, sbst, coeff) Pred_Adv_sbst = fun.NN_pred(X_adv, sbst_model, sbst['act']) Pred_Adv_Oracle = fun.NN_pred(X_adv, Oracle_model, Oracle['act']) print('Sbst - Prediction of the Original Sample: ', sbst_pred) print('Oracle - Prediction of the Original Sample: ', Oracle_pred) print('Sbst - Prediction of the Adversarial Samples: ', Pred_Adv_sbst) print('Oracle - Prediction of the Adversarial Samples: ', Pred_Adv_Oracle) fig = plt.figure(figsize=(14, 1.2)) for idx in range(10): fig.add_subplot(1,10,idx+1) plt.imshow(np.reshape(X_adv[idx],(28,28)), cmap='gray') plt.axis('off') plt.show()
################################################################################################ ''' Oracle = np.load('Oracle_h1.npz') # 1 hidden layer Oracle_model = dict([(0,Oracle['W1']),(1,Oracle['b1']),(2,Oracle['W2']),(3,Oracle['b2'])]) '' Oracle = np.load('Oracle_h2.npz') # 2 hidden layers Oracle_model = dict([(0,Oracle['W1']),(1,Oracle['b1']),(2,Oracle['W2']),(3,Oracle['b2']), (4,Oracle['W3']),(5,Oracle['b3'])]) ''' Oracle = np.load('Oracle_h3.npz') # 3 hidden layers Oracle_model = dict([(0,Oracle['W1']),(1,Oracle['b1']),(2,Oracle['W2']),(3,Oracle['b2']), (4,Oracle['W3']),(5,Oracle['b3']),(6,Oracle['W4']),(7,Oracle['b4'])]) ################################################################################################ Oracle_act = Oracle['act'] # oracle's activation function Oracle_score = fun.NN_score(fun.NN_pred(X_test, Oracle_model, actfun=Oracle_act),Y_test) print("Oracle Score: ", Oracle_score) # Training the substitute model with the algorithm in [1] sbstClf = MLPClassifier(solver=sbst_solver, alpha=1e-4, hidden_layer_sizes=(80), activation=sbst_act, random_state=1, learning_rate_init=sbst_lrate, momentum=sbst_mmt, max_iter=sbst_maxIter) sbst_Y_pred = [] for epoch in range(sbst_maxEpoch+1): # Label the current training set using the oracle sbst_Y = fun.NN_pred(sbst_X, Oracle_model, actfun=Oracle_act) # Train the substitute with the oracle labels sbstClf.fit(sbst_X,sbst_Y)
testLoc = 1100 # Load MNIST data mnist = np.load('mnist.npz') X_test = mnist['teData'][0:testRange] Y_test = mnist['teLabels'][0:testRange] (N, nInp) = np.shape(X_test) # Load Oracle - The same one used in substitute model training Oracle = np.load('Oracle_h3.npz') # 3 hidden layers Oracle_model = dict([(0, Oracle['W1']), (1, Oracle['b1']), (2, Oracle['W2']), (3, Oracle['b2']), (4, Oracle['W3']), (5, Oracle['b3']), (6, Oracle['W4']), (7, Oracle['b4'])]) Oracle_act = Oracle['act'] # oracle's activation function Oracle_score = fun.NN_score( fun.NN_pred(X_test, Oracle_model, actfun=Oracle_act), Y_test) print("Oracle Score: ", Oracle_score) # Import a substitute model sbst = np.load('sbst_NN_h1.npz') sbst_model = dict([(0, sbst['W1']), (1, sbst['b1']), (2, sbst['W2']), (3, sbst['b2'])]) sbst_act = sbst['act'] sbst_score = fun.NN_score(fun.NN_pred(X_test, sbst_model, actfun=sbst_act), Y_test) print("Sbst Score: ", sbst_score) # Predictions Pred_Ori_sbst = fun.NN_pred(X_test, sbst_model, sbst_act) Pred_Ori_Oracle = fun.NN_pred(X_test, Oracle_model, Oracle_act)