【学习笔记】Fuzzing学习笔记3——灰盒Fuzzing
灰盒变异的模糊测试。
普通fuzzing:从0开始构造测试用例突变fuzzing:从seed开始构造测试用例灰盒fuzzing:有引导的突变fuzzing
背景上回书说到,AFL是突变fuzzer,通过把种子字符串进行些微修改,得到变异体;此外AFL还会将一个种子的前半部分与另一个种子的后半部分连接,形成变异体。
AFL也是个灰盒fuzzer,这是由于AFL需要使用程序内部信息(即覆盖率)。AFL不是白盒,因为AFL没有对程序进行约束求解、程序分析之类的,只是简单获取了一个覆盖率。如果生成的样本能够提升覆盖率,那么就将这个样本添加进种子队列以供下次突变使用(这就意味着突变体有重复突变的可能)。
【学习笔记】Fuzzing学习笔记2——基于变异的Fuzzing
基于变异的模糊测试。
https://www.fuzzingbook.org/html/MutationFuzzer.html
大多数随机生成的输入在语法上都是无效的,程序很快就会检测并拒绝这些输入,这样便达不到深入测试Runner内部的目的。因此我们必须试图生成有效的输入。
本节我们介绍Mutation Fuzzing,这种基于变异的方法对现有输入进行小的更改,这些更改可能仍使输入保持有效,但仍会表现出新的行为。
要对字符串形式的输入进行变异(Mutate),具体来说,就是执行随机插入字符、删除字符、修改字符等操作。Mutational fuzzing的特点是基于一个有效的原始输入,与之前
【学习笔记】Fuzzing学习笔记1——认识Fuzzing的基本单元
Fuzzing又称模糊测试。
https://www.fuzzingbook.org/html/Fuzzer.html
Fuzzing测试是什么?
Create random inputs, and see if they break things.
说得简单、纯粹点,Fuzzing是一种软件测试方法,通过不断生成不同的输入,使被测程序崩溃、出错,以此改进程序本身的软件测试方法。由于Fuzzing的核心在于生成软件测试用例,因此这种方法又被称为生成软件测试。
构建第一个fuzzerimport random
def fuzzer(max_length=100, char_start=32,
【竞赛打卡】leetcode打卡:分治算法
见多了优秀的文章,再写博客的时候就会感叹自己的学识浅薄。
leetcode 50 Pow(x,n)题目描述
实现 pow(x, n) ,即计算 x 的 n 次幂函数。
算法描述:
Pow算法有快速幂实现方法。
快速幂,二进制取幂(Binary Exponentiation,也称平方法),是一个在 $O(\log(n))$ 的时间内计算 $a^n$ 的小技巧,而暴力的计算需要 $O(n)$ 的时间。而这个技巧也常常用在非计算的场景,因为它可以应用在任何具有结合律的运算中。其中显然的是它可以应用于模意义下取幂、矩阵幂等运算。
计算a的n次方表示将n个a连乘在一起。然而当a和n太大的时候,这种方法就
【学习笔记】使用tf.data对预处理过程优化
本文是关于 tf.data 介绍的第二篇,主要介绍一些数据预处理方面的优化方法,诸如并行化预处理映射函数、使用缓存等。
构建一个机器学习模型时,由于数据预处理过程不能使用GPU进行加速,因此格外耗时。背后的原因可能是CPU、网络或者缓存等复杂的因素。因此要研究如何提升数据预处理的效率,首先需要控制实验的变量。想实现这一点,构造一个虚假的数据集比较可行。
通过构建一个虚假的数据集,从tf.data.Dataset继承的类,称为ArtificialDataset。该数据集模拟三件事:
生成num_samples样本(默认为3)
在第一个模拟打开文件的项目之前睡眠一段时间
在产生每个项目以模拟从文
【学习笔记】tf.data基本使用
使用 tf.data API 可以轻松处理大量数据,支持多样化的数据格式,还可以方便执行复杂的转换。本文介绍了不同类别源数据转化为 tf.data.Dataset 的方法,以及 Dataset 常见的预处理方法。
概览最近几年我们在机器学习的加速计算领域取得了一些突破。虽然我们进行指标运算和矩阵运算所需的时间大大减少了,但是提供数据加速的CPU却没能跟上相应的步伐,这就成为了预处理中的瓶颈。我们本以为可以通过构建更复杂的模型来减少对硬件的需求,但是CPU的效率还是取决于他们拥有多少RAM。
对于一些数据集很大的问题,解决问题的方法除了提升CPU的性能之外,还有对数据集进行分批次处理,但是分批
【学习笔记】使用TensorBoard分析模型性能
这是TensorBoard笔记的第六篇,讲述的是如何使用TensorBoard分析模型的性能,优化模型的资源消耗。
TensorBoard可以监控模型的各个组分运行过程中的时间消耗和资源消耗,并根据这些数据对模型下一步优化提出建议。
首先我们安装性能分析的插件
!pip install -U tensorboard_plugin_profile
定义TensorBoard的回调函数(数据预处理和模型定义略去不表),注意这里新的参数profile_batch只监控第500到520之间的20个Batch,避免监控过多导致模型运行效率过低。
# Create a TensorBoard callb
【学习笔记】通过TensorBoard可视化词嵌入空间
这是TensorBoard笔记的第五篇,讲述的是如何使用TensorBoard对词嵌入空间可视化。
TensorBoard可以将词嵌入空间二维化,方便我们理解词嵌入空间的含义。
from tensorboard.plugins import projector
引入IMDb数据集。tensorflow_datasets是tensorflow的官方数据集库。
import tensorflow_datasets as tfds
(train_data, test_data), info = tfds.load(
"imdb_reviews/subwords8k",
【学习笔记】通过TensorBoard调整超参数
这是TensorBoard笔记的第四篇,讲述的是如何借助TensorBoard调整模型的超参数。
TensorBoard中的HParams仪表板是比较新颖的工具包,提供了多种调节超参数的工具,并且该工具还在不断更新中。
from tensorboard.plugins.hparams import api as hp
用过sklearn进行机器学习模型调参的同学应该体验过交叉验证调参的方法。通过提供许多不同的超参数选项,GridSearchCV将训练多个模型,并取性能最优的模型超参数。
from sklearn.model_selection import GridSearchCV
from
【学习笔记】用TensorBoard生成模型图
这是TensorBoard笔记的第三篇,讲述的是如何令TensorBoard生成模型架构图。
TensorBoard不但可以展示存在的图片和张量,还可以生成图片,诸如模型图等。通过TensorBoard的GRAPHS选项卡,可以快速查看模型结构的预览图,并确保其符合设计预期。
比如我们定义模型如下:
model = keras.models.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(32, activation='relu'),
keras.la
【学习笔记】用TensorBoard展示图片
这是TensorBoard笔记的第二篇,讲述的是如何令TensorBoard展示外界已有的图片和Tensor。
我们可以利用TensorBoard展示图片类数据,或者通过tf.summary将张量类数据转化成图片。下面是对Fashion-MNIST数据集中部分图片的可视化:
可视化单个图片import tensorflow as tf
from tensorflow import keras
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels)
【学习笔记】TensorBoard简介
简单介绍了TensorBoard的用途和使用方法。
TensorBoard简介TensorBoard是Google开发的模型内部参数跟踪和可视化的调试工具。在Tensorflow中,用TensorBoard可以监控模型的各种指标的变化(如acc、loss的动态变化),可以将模型结构可视化,可以可视化词嵌入空间,可以分析模型性能,可以分析数据集的公平性等等,是一个非常强大且非常简单的工具。
TensorBoard核心就是回调函数和可视化操作面板。通过编写回调函数获取模型信息,通过命令行启动TensorBoard图形化界面。
TensorBoard的回调函数API为:
tf.keras.callb
【竞赛打卡】新闻文本分类之注意力机制与预训练模型
见多了优秀的文章,再写博客的时候就会感叹自己的学识浅薄。
本章介绍了Bert的原理和使用,具体包括pretrain和finetune两部分。
基于深度学习的文本分类Transformer原理当用神经网络来处理大量的输入信息时,可以借鉴人脑的注意力机制,只选择一些关键的信息输入进行处理,来提高神经网络的效率。注意力机制可以单独使用,但更多地用作神经网络中的一个组件。基于循环神经网络的序列到序列模型的一个缺点是无法并行计算,为了提高并行计算效率以及捕捉长距离的依赖关系,我们可以使用自注意力模型(Self-Attention Model)来建立一个全连接的网络结构。
Transformer模型是一个
【竞赛打卡】新闻文本分类之深度学习Word2Vec
谦虚使人进步,骄傲使人落后。
最近课题内容较多时间紧张,同时我认为学习资料非常翔实,遂转发以做笔记。之后会在文章最后总结自己的思路和经验。
Task5 基于深度学习的文本分类2在上一章节,我们通过FastText快速实现了基于深度学习的文本分类模型,但是这个模型并不是最优的。在本章我们将继续深入。
基于深度学习的文本分类本章将继续学习基于深度学习的文本分类。
学习目标
学习Word2Vec的使用和基础原理
学习使用TextCNN、TextRNN进行文本表示
学习使用HAN网络结构完成文本分类
文本表示方法 Part3词向量本节通过word2vec学习词向量。word2vec模型背后的基本思想
【竞赛打卡】新闻文本分类之深度学习FastText
当你写东西或讲话的时候,始终要想到使每个普通工人都懂得,都相信你的号召,都决心跟着你走。要想到你究竟为什么人写东西,向什么人讲话。——《反对党八股》
在上一章节,我们使用传统机器学习算法来解决了文本分类问题,从本章开始我们将尝试使用深度学习方法。与传统机器学习不同,深度学习既提供特征提取功能,也可以完成分类的功能。
本次学习我们主要介绍FastText。
fastText是一个快速文本分类算法,与基于神经网络的分类算法相比有两大优点:1、fastText在保持高精度的情况下加快了训练速度和测试速度2、fastText不需要预训练好的词向量,fastText会自己训练词向量3、fastText两
【竞赛打卡】新闻文本分类之机器学习文本分类
今我睹子之难穷也,吾非至于子之门则殆矣。
文本表示方法实践自然语言总需要转换成数值等表示才能被线性模型等处理。下面利用task1&2提到的编码方式进行实践。
Label这种编码方式是把自然语言首先分词成基本语素单元,然后把不同的单元赋予唯一的整数编码。比如本次比赛提供的数据集就是该编码方式。每条数据都是整数序列,最大整数为7549,最小整数为0。
这样做的好处是相对节约内存,且实现简单;坏处是破坏了自然语言中部分语义,无法进一步进行诸如删除停用词、词根提取等操作。另外,编码的大小可能会让算法误以为词和词之间有大小关系。
因为原来的数据集就是此编码方法,故不再赘述。
Bag of Wor
【竞赛打卡】零基础入门NLP之新闻文本分类之数据读取与分析
不要对我有任何期待哦!
实验环境Colab
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
import seaborn as sns
import scipy
from collections import Counter
准备数据df_train = pd.read_csv(train_path, sep='\t')
df_test = pd.read_csv(test_pa
【竞赛打卡】零基础入门NLP之新闻文本分类之赛题理解
这项任务不好做呀,稍不小心就占用了task2的内容。
零基础入门NLP之新闻文本分类之赛题理解一、现在公开的情报1. 比赛内容本次比赛的任务为文本的分类任务。虽然简单,但是想要取得高分还是不容易。
待分类文本为新闻文本。新闻文本根据来源,分为财经、彩票、房产、股票、家居、教育、科技、社会、时尚、时政、体育、星座、游戏、娱乐,共14类。
2. 数据内容训练集和测试集在官网下载。
其中训练集是带正确标签的,测试集不带标签,是真正的题目。我们的任务是训练模型,正确分类测试集中每一条新闻的标签。
训练集由20万条新闻构成,测试集五万条数据。
每条新闻都被编码为整数序列。每个单词对应一个整数。
数据集中
【学习笔记】特征工程
本文翻译自HJ van Veen的Feature Engineering一文,总结了数据竞赛中常用的特征工程方法。
特征工程本文翻译自HJ van Veen的Feature Engineering一文。由于原文以PPT方式呈现,信息高度压缩,因此在我整理本文过程中,添加了自己的理解。如有错误,敬请指正!
全文概览:
机器学习的特征工程是将原始的输入数据转换成特征,以便于更好的表示潜在的问题、提高预测模型准确性的过程。
特征工程是数据科学中最具创造性的部分,决定了机器学习模型的性能上限。
即便是号称端到端的神经网络也需要特征工程,比如cv需要获得HOG,SIFT,whitening, per
【论文阅读笔记】CAGFuzz: Coverage-Guided Adversarial Generative Fuzzing Testing of Deep Learning Systems
提出了CAGFuzz,这是一种覆盖率指导的灰盒对抗性生成模糊测试方法,可以为目标DNN生成对抗性示例,以发现其潜在缺陷。
DeepXplore,使用多个DNN来发现并生成位于这些DNN决策边界之间的对抗性示例。
DeepHunter,使用变形突变策略来生成新的测试示例。
DeepGauge,提出了深度神经网络的新覆盖标准。
为了提高泛化能力,仅从数据的角度添加较小的扰动就非常重要。
现有研究完全忽略了包含高级语义信息(例如图像对象类别和场景语义)的深度特征约束。使用L0和L∞来限制对抗性示例的像素级变化,这样的约束只能代表对抗实例和原始实例之间的视觉一致性,而不能保证对抗实例和原始实例的高级