9.5.3 在Cleverhans中進行對抗訓練

9.5.3 在Cleverhans中進行對抗訓練

9.5.3在Cleverhans中進行對抗訓練

對抗訓練的過程就是用生成的對抗樣本和原始訓練數據重新訓練模型的過程,我們繼續使用上例中生成的ModelBasicCNN和對抗樣本。為了與之前訓練的模型區別開來,我們重新實例化ModelBasicCNN和FGSM算法實例。

model2=ModelBasicCNN('model2',nb_classes,nb_filters)

fgsm2=FastGradientMethod(model2,sess=sess)

defattack(x):

returnfgsm2.generate(x,**fgsm_params)

loss2=CrossEntropy(model2,smoothing=label_smoothing,attack=attack)

preds2=model2.get_logits(x)

生成對抗樣本並重新訓練模型。

adv_x2=attack(x)

train(sess,loss2,x_train,y_train,evaluate=evaluate2,

args=train_params,rng=rng,var_list=model2.get_params())

其中evaluate2函數用於對抗訓練時打印中間結果。

defevaluate2():

#計算對抗訓練的模型在原始數據上的準確度

do_eval(preds2,x_test,y_test,'adv_train_clean_eval',False)

#計算對抗訓練的模型在對抗樣本上的準確度

do_eval(preds2_adv,x_test,y_test,'adv_train_adv_eval',True)

經過對抗訓練,可以成功識別對抗樣本中的93.55%。

Testaccuracyonlegitimateexamples:0.9899

Testaccuracyonadversarialexamples:0.9355

上一章書籍頁下一章

智能系統與技術叢書·AI安全之對抗樣本入門

···
加入書架
上一章
首頁 其他 智能系統與技術叢書·AI安全之對抗樣本入門
上一章下一章

9.5.3 在Cleverhans中進行對抗訓練

%