11.5 效果验证

效果验证阶段,使用测试数据集进行验证,遍历测试数据集中的每一条数据,生成特征向量,限制在nb_max_episode_steps_test步以内进行尝试免杀,如果免杀成功则计数并进入下一次循环。

最后统计训练数据集成功免杀的个数。整个过程中免杀动作的选择使用贪婪算法,即使用Q函数对应的最大值的动作执行,代码如下:


success=0
sum=0
shp = (1,) + tuple(model.input_shape[1:])
for sample in samples_test:
    sum+=1
    for _ in range(nb_max_episode_steps_test):
        if not waf_checker.check_xss(sample) :
            success+=1
            print sample
            break
        f = features_extra.extract(sample).reshape(shp)
        act_values = model.predict(f)
        action=np.argmax(act_values[0])
        sample=xss_manipulatorer.modify(sample,ACTION_LOOKUP[action])
print "Sum:{} Success:{}".format(sum,success)

运行程序,在nb_max_episode_steps_test取3的情况下(即只有3次机会进行免杀动作),51个测试样本里面有20个成功免杀,效果相当不错:


Sum:51 Success:20