日记

2019.3.11:

h-crystal:
    NetWork = Grid
    Not, Link

Batch Normalization 批标准化:
    分层数据统一


torch.tensor:
    Tensor代替numpy中的数组
     多维矩阵
    默认 -- torch.FloatTensor


pytorch 实现机器学习步骤:
    模块引入
    数据准备
    展示部分数据
    训练模型
    测试训练结果
    加载预训练模型训练--版本1
    加载预训练模型训练--版本2

Variable:
    将Tensor封装了一下,并增加了新的功能
    将Variable类型的数据转化为Tensor类型的数据: variable.data
    计算变量的梯度使用 .backward()函数

神经网络:
    torch.nn包用来构建神经网络
    nn包调用autograd包实现神经网络定义、梯度计算
    nn.Module类包含了神经网络各层的定义,以及forward(input)前向传播函数的定义,返回输出值output

对于神经网络的典型处理:
    

定义待可学习参数的网络结构;

    数据集输入;

    对输入进行处理,主要体现在网络的前向传播;
    
计算loss function;
    
反向传播求梯度;
    
根据梯度改变参数值,最简单的实现方式为:

        weight = weight - learning_rate * gradient



Conv2d:
    pytorch 中二维卷积层接口

Linear:
    pytorch 中线性回归函数接口

nn.ReLU作为一个层结构,必须添加到nn.Module容器中才能使用,而F.ReLU则作为一个函数调用

为什么需要非线性的激活函数呢?
    只是将两个或多个线性网络层叠加,并不能学习一个新的东西

通过激活函数的加入可以学到非线性的关系

常用的激活函数有:
    Sigmoid:
        优点:
            是便于求导的平滑函数;
            能压缩数据,保证数据幅度不会趋于正无穷或负无穷
        缺点:
            


容易出现梯度消失(gradient  vanishing)的现象;



            Sigmoid的输出均值不是0(zero-centered)的;



            指数运算相对耗时


    Tanh:
        解决了sigmoid函数non-zero问题。但与sigmoid相同的是也存在梯度消失和指数运算的缺点
    ReLU:
        优点:
            收敛速度明显快于sigmoid和tanh
            不存在梯度消失问题
            计算复杂度低,不需要指数运算
        缺点:
            Relu输出的均值非0
            存在神经元坏死现象(Dead ReLU Problem)
            relu不会对数据做规范化(压缩)处理
    Leaky ReLU:
        用来解决ReLU带来的神经元坏死的问题,但是其表现并不一定比ReLU好

view函数:
    将一个多行的Tensor拼成一行

forward 函数中可以对Tensor进行任何操作

zero_grad:
    梯度清零

nn.MSELoss:
    计算两者之间的平均方差值

反向传播的过程只需要调用loss.backgrad()函数即可


dataloader:


怎么把数据做成batch的:
    数据读取,构建Dataset子类:
        PyTorch用类torch.utils.data.DataLoader加载数据,并对数据进行采样,生成batch迭代器
        必须重载的两个函数是len和getitem
    数据加载:
        torch.utils.data.DataLoader()函数
    



learningrate的含义,一般怎么调它
:
    学习率,通常要对learning rate 进行衰减
    更改param_group['lr']的值来更改对应参数组的学习率
    PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现
        1 等间隔调整学习率 StepLR
        2 按需调整学习率 MultiStepLR
        3 指数衰减调整学习率 ExponentialLR
        4 余弦退火调整学习率 CosineAnnealingLR
        5 自适应调整学习率 ReduceLROnPlateau
        6 自定义调整学习率 LambdaLR


crossentropyloss (交叉熵损失函数):
    针对单目标分类问题, 结合了 nn.LogSoftmax() 和 nn.NLLLoss() 来计算 loss.


softmax回归在多类分类中的作用:
    它将多个神经元的输出,归一化到( 0, 1) 区间内,因此Softmax的输出可以看成概率

2019.3.11

tqdm:
    用于数据的进度条显示

Dataset抽象类:
    数据集进行子类化
    重写 __len__ (数据集大小)、 __getitem__(支持0到len(self)的整数索引)方法

包装数据和目标张量的数据集

训练神经网络时:
    最好是对一个batch的数据进行操作,同时还需要对数据进行shuffle和并行加速等

batch_size:
    每一个batch加载多少个样本

sampler (Sampler, optional) :
     定义从数据集中提取样本的策略

num_workers:
    使用多进程加载的进程数

collate_fn: 
    如何将多个样本数据拼接成一个batch,一般使用默认的拼接方式即可

pin_memory:
    是否将数据保存在pin memory区,pin memory中的数据转到GPU会快一些 

drop_last:
     如果数据集大小不能被batch size整除,则设置为True后可删除最后一个不完整的batch。如果设为False并且数据集的大小不能被batch size整除,则最后一个batch将更小。(默认: False)

Normalize():
    归一化

大数据量:
    使用 shuffle, 分割成mini-batch

delimiter:
    参数是用来指定每一行用来分隔数据的分隔符

keepdim=True:
    不进行挤压

pylint:
    检查一行代码的长度,变量名是否符合命名标准

Dataset是一个包装类:
    用来将数据包装为Dataset类,然后传入DataLoader中,我们再使用DataLoader这个类来更加快捷的对数据进行操作。

enumerate:
    对可迭代的数据进行标号并将其里面的数据和标号一并打印出来

损失函数的作用:
    衡量模型模型预测的好坏

成本函数的作用:


from PIL import Image

Dataloader类:
    数据的初始化操作

torch.randperm()

2019.3.12:

collate_fn:    
    如何取样本的,我们可以定义自己的函数来准确地实现想要的功能 

drop_last:
    告诉如何处理数据集长度除于batch_size余下的数据。True就抛弃,否则保留

pin_memory:
    如果设置为True,数据加载器会在返回前将张量拷贝到CUDA锁页内存。


======将已经分好文件,传进来,返回一堆的batch======

ctype:
    提供和C语言兼容的数据类型,可以很方便地调用C DLL

_worker_loop:
    加载数据

_pin_memory_loop:
    数据加载器会在返回前将张量拷贝到CUDA锁页内存

numpy_type_map:
    numpy与torch对应数据类型

default_collate:
    (默认校对)错误提示

pin_memory_batch:
    将输入batch的每一个Tensor都拷贝到CUDA

_SIGCHLD_handler_set:
    Dataloader worker failures

DataLoader本质上就是一个iterable(跟python的内置类型list等一样),使用iter(),不能使用next()访问,访问并利用多进程加速batch data的

实现Dataset对象,传入到dataloader中,yeild返回每一次batch的 数据


Dataset  -->  DataLoader  -->  循环DataLoader(非常重要):
dataset = MyDataset() # 实例化Dataset
dataloader = DataLoader(dataset) # 实例化DataLoader
num_epoches = 100 # 训练100次
for epoch in range(num_epoches): # 训练100次
    for img, label in dataloader: # 取出数据加载到模型
        ... ...


iterable:每次调用都会返回一个从头开计数的迭代器(__iter__)
iterator:是从当前位置开始的调用hasNext()方法(__iter__和__next__raise:抛出异常
    raise ValueError("抛出参数异常")

timeout:
    timeout如果是正数,表明等待从worker进程中收集一个batch等待的时间,若超出设定的时间还没有收集到,那就不收集这个内容(应总是大于0,默认为0)

worker_init_fn :
    每一个worker的初始函数

sampler:
    对数据进行采样

__initialized:
    是否初始化

batch_sampler:
    与sampler类似,但是一次只返回一个batch的indices(索引)

multiprocessing:
    多进程管理的包

__iter__yield :
    把一个函数变成一个 generator(像函数一样,但可以返回多个值)
    

__next__:
    返回容器中的下一个元素

raise StopIteration:
    到了Iteration程序结尾,没有数据了,通过抛出异常的方式,来终止程序

__getstate__:
    返回一个可选的对象(例如元组),其中包含足够的信息来重构实例

from . import *:
    从当前文件夹导入所有文件

2019.3.13

self.index_queue 中存放是 (batch_idx, sample_indices) ,其中 batch_idx 是个 int 值, sample_indices 是个 list 

self.data_queue 中存放的是 (batch_idx, samples), 其中 samples 是 一个 mini-batch 的样本

with:
    自动关掉文件管道

listdir:
    文件下的目录

enumerate:
    将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列

generator:
    实质就是iterator,一个迭代器

数据集分成3个部分:
    训练集、验证集、测试集

Jupyter:
    灵活,处理数据,清洗数据

randn:
    产生随机数

requires_grad:
    True 表示要求梯度(backward)、False不要求梯度

numel():
    数组是否满足指定元素的个数
    return torch.sum(diff * diff) / diff.numel()

with:
    类似与抛出异常

torch.no_grad():
    Adjust weights & reset gradients

torch.nn:
    用于搭建快速各层的模块

for xb, yb in train_dl:
    print(xb)
    print(yb)
    break           # 酱紫就只会显示一个batch中的数据

model.weight :(model = nn.Linear)
    线性问题中的权重

model.bias:(model = nn.Linear)
    线性问题中的偏差

model.parameters:(model = nn.Linear)
    线性问题参数

pandas读取数据:
    pd.read_csv(file_path)

2019.3.14:

torch.item():
    only one element tensors can be converted to Python scalars

delimiter=",":
    在np.loadtxt中相当与分隔符的作用

dtype='float32':
    在np.loadtxt中指定加载数据保存的类型

chechsum:
    校验

__init__() should return None, not 'generator'

indeces:
    每个数据的行号

dataloader中dataset:
    一个文件返回一个tensor,多个文件返回list

collate_fn:
    很节省内存的,即数据不是一次性加载到内存中再一点点挤牙膏挤出来



yield(生成器):
    

2019.3.15:

python中的next():
    函数用于返回迭代器中的下一项

python中的iter():
    用来生成迭代器

pd.DataFrame类:
    保存数据,转化成pandas类型的数据

nr.randint(0, 100, size=(3, 4)):
    生成(3,4)的0到100之间的数据

data.to_csv():
    存放数据

Dataset:
    数据集的抽象类

DataLoader提供为Dataset类对象提供了:
    1.批量读取数据
    2.打乱数据顺序
    3.使用multiprocessing并行加载数据

Dataset中的__getitem__:
    返回地idx个图像及相关信息

torch.utils.data.Dataloader:
    通过这个类,我们在准备mini-batch的时候可以多线程并行处理

mnist数据集

PyTorch 定义:
    一个针对深度学习, 并且使用 GPU 和 CPU 来优化的 tensor library (张量库) .

Tensor(张量):
    类似于NumPy的ndarray,但还可以在GPU上使用来加速计算


from __future__ import print_function:
    在python2X的环境中可以向python3X那样使用print函数

project interpreter:
    用于管理pycharm中使用的编辑环境

@overload :
    根据参数不同实现不同的功能

torch.empty(n, m):
    生成n行m列的未初始化的tensor数据

torch.rand(n, m):
    生成n行m列的随机tensor数据

torch.zeros(n, m):
    生成n行m列全为零的数据

torch.tensor([x, y, z]):
    直接生成tensor数据

x = x.new_ones(n, m, dtype=torch.double):
    根据已有的tensor建立新的tensor

torch.rand_like(x):
    生成形状跟x相同的tensor

torch.add(x, y)  等价于 x + y

y.add_(x) 等价于 y = torch.add(x, y)

in-place:
    原位/原地操作

tensor可以使用像标准的NumPy一样的各种索引操作

view:
    改变tensor形状

.item():
    转化为python类型数据

tensor的运算操作,包括转置,索引,切片,数学运算, 线性代数,随机数等

Torch张量和NumPy数组将共享它们的底层内存位置,更改一个将更改另一个

np.add(mat08, 2, out=mat08)
    表示mat08 = mat08 + 2

CPU上的所有张量(CharTensor除外)都支持转换为NumPy以及由NumPy转换回来

张量可以使用.to方法移动到任何设备(device)上

device = torch.device("cuda")
x = x.to(device)
    将计算移植到GPU上运算

PyTorch中,所有神经网络的核心是autograd包

autograd包为张量上的所有操作提供了自动求导机制,它是一个在运行时定义(define-by-run)的框架

autogrand中属性requires_grad为True,通过调用.backward(),来自动计算所有的梯度。这个张量的所有梯度将会自动累加到.grad属性

要阻止一个张量被跟踪历史,可以调用.detach()方法

staticmethod装饰器:
    将被装饰的函数从类中分离出来,该函数不能访问类的属性,简单说可以将该函数理解为一个独立的函数,不允许使用self。

x = torch.ones(2, 2, requires_grad=True):
    创建一个张量并设置requires_grad=True用来追踪其计算历史

torch.mean():
    求平均值

.requires_grad_(...) 原地改变了现有张量的 requires_grad 标志。如果没有指定的话,默认输入的这个标志是False。

如果tensor是一个标量。我们直接进行反向传播,out.backward()和out.backward(torch.tensor(1.))等价

.grad:
    表示求导数

雅可比矩阵:
    一阶偏导数以一定方式排列成的矩阵,

norm():
    求范式

我们只想要雅可比向量积,只需将这个向量作为参数传给backward

用with torch.no_grad()来阻止autograd跟踪设置了 .

with torch.no_grad():
    print((x ** 2).requires_grad)

使用torch.nn包来构建神经网络

2019.3.18:

sympy:
    用于进行函数计算的模块

str.substr(i):
    得到str从i个位置开始到最后的字符串

破解拼图验证码:


uuid:
    提供UUID类和函数uuid(),用于生成全局唯一标识符

re:
    re模块提供对正则表达式的支持

selenium:
    selenium模块用于模拟人的点击事件来连续访问浏览器,
    自动化测试工具

极验验证:
    滑动验证码破解,拼图破解

PhantomJS:
    Web 自动化测试与智能爬虫利器
    无界面浏览器

数据包的Response

edge detector

Opencv:
    contour detector,轮廓检测

2019.3.19

为防止验证成功时页面快速切换至查询结果页面,可在Network选项卡下将Preserve log选项勾选

geetest_challenge和geetest_validate

passtime应该是拖动验证码的时间

imgload应该是验证码图片载入时间

api的参数v是根据请求时间动态变化的

fullbg:
    全图背景图片

OpenCV应用领域:
    人机互动、物体识别、图像分割、人脸识别、动作识别、运动跟踪、机器人、运动分析、机器视觉、结构分析、汽车安全驾驶

cv2.findContours(Image,contours,hierarchy,mode,method):
    提取轮廓,用于提取图像的轮廓
    利用cnt[num],对第num个轮廓进行操作
    第一个返回值是另一个图片,跟输入的图片相似
    第二个返回值hierarchy:
        矩阵大小为N×M,N为轮廓的个数,M恒等于4,
        第一个数:表示同一级轮廓的下个轮廓的编号,如果这一级轮廓没有下一个轮廓,一般        是这一级轮廓的最后一个的时候,则为-1
        第二个数:表示同一级轮廓的上个轮廓的编号,如果这一级轮廓没有上一个轮廓,一般        是这一级轮廓的第一个的时候,则为-1
        第三个数:表示该轮廓包含的下一级轮廓的第一个的编号,假如没有,则为-1
        第四个数:表示该轮廓的上一级轮廓的编号,假如没有上一级,则为-1

cv2.imread(FILE_PATH):
    得到待加载图片

cv2.cvtColor(img, cv2.COLOR_BGR2GRAY):
    cvtColor 颜色空间转化器,将RGB的图片转化为灰度图片

cv2.threshold():
    图像去噪,通过二值化使图像中数据量大为减少,从而能凸显出目标的轮廓

cv2.RETR_TREE:
    RETR_TREE:提取所有轮廓并重新建立网状轮廓结构 

cv2.CHAIN_APPROX_SIMPLE:
    CHAIN_APPROX_SIMPLE:压缩水平方向,垂直方向,对角线方向的元素,值保留该方向的重点坐标,如果一个矩形轮廓只需4个点来保存轮廓信息 

cv2.drawContours(Image,contours,contourIdx,color,thickness):
    绘制轮廓,用于绘制找到的图像轮廓
    Image:表示目标图像
    contours:表示输入的轮廓组,每一组轮廓由点vector构成
    contourIdx:指明画第几个轮廓,如果该参数为负值,则画全部轮廓
    color:为轮廓的颜色
    thickness:为轮廓的线宽,如果为负值或CV_FILLED表示填充轮廓内部

cv2.waitKey(0):
    表示程序会无限制的等待用户的按键事件 

cv2.contourArea():
    计算轮廓面积

cv2.arcLength(cnt, True):
    计算轮廓面积

cv2.approxPolyDP();
    对图像轮廓点进行多边形拟合

cv2.polylines():多边形
    
boundingRect():
    函数作用:计算轮廓的垂直边界最小矩形

selenium(自动化测试):
    1、pip install selenium
    2、下载webdriver,根据浏览器的不同下载不同的webdriver
    3、操作selenium

ChromeDriver:
    通过chrome的自动代理框架控制浏览器

driver = webdriver.Chrome()
    创建适用与chrome浏览器的driver
    同时,打开chrome浏览器

driver.get('http://www.baidu.com')
    打开百度对应的网页

driver.find_element_by_id('kw').send_keys("GetcharZp")
    找到id=kw的输入框,输入GetcharZP 字段

driver.find_element_by_id('su').click()
    找到'su'这个按钮,执行点击事件

document.documentElement.scrollTop=10000:
    返回或设置匹配元素的滚动条的垂直位置

driver.execute_script(js):
    执行对应的js代码

geetest(之前):
    未点击--原图
    点击--有缺块的图

ActionChains():
    动作链,执行多个动作的时候使用,当使用perform()时,将所有动作,依次执行

click_and_hold():
    鼠标点击圆球不松开

move_by_offset():
    

需要对客户的资料进行保密,防止浏览器软件或者恶意插件获取到可以在input中加入autocomplete="off" 来关闭记录

driver.implicitly_wait(3):
    设置他的隐式等待时间可以,可以解决输入框不能输入字段的问题

getpixel(x, y):
    得到坐标(x, y)处的RGB

 2019.3.20

Fiddler是通过改写HTTP代理,让数据从它那通过,来监控并且截取到数据

Fiddler(app.gsxt.gov.cn):
    JSON, searchword=秘塔

RNN(循环神经网络):
    进行文本分类

训练一个词向量模型,需要大量语料

LSTM(长短期记忆网络):
    处理和预测时间序列中间隔和延迟相对较长的重要事件

GRU相当于简化的 LSTM

聊天机器人:
    基于检索的模型提供支持

sequence-to-sequence:
    应用于机器翻译、自动应答机器人等

使用小批量数据联合训练解码器和编码器模型

from __future__ import absolute_import :
    那么在程序的编写过程中使用类似from package.submodule import b 只能导入系统环境路径里面的包,导入不了你写的应用程序的子包,如果导入你写的应用程序的子包必须使用from ..submodule import b。

from __future__ import print_function:
    即使在python2.X,使用print就得像python3.X那样加括号使用

from __future__ import unicode_literals:
    模块中显式出现的所有字符串转为unicode类型

torch.jit:
    JIT是一套编译器工具,用于弥合PyTorch研究 与生产之间的差距

csv模块:
    用于csv文件的读写

codecs:
    自然语言编码转化模块

itertools:
    用于创建自定义的迭代器

torch.cuda.is_available():
    用于判断系统是否适合使用cuda加速

规则匹配

fasttext

2019.3.21

unittest:
    编写单元测试,我们需要引入Python自带的unittest模块

bitbucket:
    仓库代码管理

assertEqual:
    断言,用于判断在unittest中判断两个结果是否一致

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
    请求行(request line)、请求头部(header)、空行和请求数据四个部分组成

HTTP响应也由四个部分组成,分别是:
    状态行、消息报头、空行和响应正文

session是一次浏览器和服务器的交互的会话,session信息存在于服务器端,存在服务器的/tmp 目录下

唯一的session_id 来绑定一个用户

请求行信息:  GET /day36/demo2 HTTP/1.1
请求行信息 = 请求方式(GET) + 请求的资源(/day36/demo2 ) + 协议的版本(http1.1)
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成

GET:带参, POST:不带参

请求头部通知服务器有关于客户端请求的信息,请求头用于说明是谁或什么在发送请求、请求源于何处,或者客户端的喜好及能力

状态行(status line):
    通过提供一个状态码来说明所请求的资源情况

消息头:
    用于描述服务器的基本信息,以及服务器的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它送的数据

status_code:
    网页状态码

采集时为避免被封IP,经常会使用代理

大部分时候我们都是通过xml配置方式向DAO中注入sessionfactory来实例化bean

from urllib.parse import urlencode:
    可以在拼url的时候把其转化为str

405:
    方法不被允许

urllib应用于python3中,将之前的urllib2和urllib1合并了

header

MongoDB 是一个介于关系数据库和非关系数据库之间的产品

2019.3.22

端口:5601
    相当于es的一个前端界面,可以在这里面访问数据

端口:9200
    一段json数据

JSON 数据的书写格式是:名称/值对

JSON 对象在花括号中书写

Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎,一切都是以索引的形式存储,它实际上做的只是创建一个你自己的Schema文档

数据以JSON格式非结构化存储,这也使其成为一种NoSQL数据库

可以通过从命令行运行curl -XDELETE localhost:9200/_all来毁掉整个世界

获取所有的设置 : GET _all/_settings

在设置中分片的数量不能修改但是副本的数量可以修改

PUT:相当于更改数据可以created,也可以updated

GET:相当于查询数据

DELETE:
    可以删除记录 DELETE /school/student/7
    删除表 DELETE /school/student
    删除库 DELETE /school

PUT/POST:
    都可以用来增加数据,用PUT自己指定ID,用POST系统自动生成唯一标识ID

curl www.baidu.com:
    会以HTML的形式返回百度的页面

可以通过PUT创建索引

# 通过PUT创建库
PUT /school
{
  "student":{
    "name":true,
    "age":true
  }
}

# 以GET方式添加数据,用户追加ID
PUT /school/student/7
{
  "name":"GetcharZp7",
  "age":20
}

# 以POST方式添加数据,系统自己生成ID
POST /school/student/
{
  "name":"GetcharZp6",
  "age":18
}

# 查询该库下的所有记录
GET /school/_search
{
  "query": {
    "match_all": {}
  }
}

# 删除ID=7的记录
DELETE /school/student/7

Kibana:
    _type表示该条数据对应在那个表中
    _index表示该条数据在那个库中
    _score表示文档对应search相关的匹配度
    hits表示存放数据的位置
    mapping 映射是创建索引的时候,可以预先定义字段的类型以及相关属性 
    "result"="noop" : 空操作

# 根据id=1在school库的student表中只查找name字段的内容
GET /school/student/1?_source=name

# 根据content的模糊匹配查询, 根据pubtimea倒序排列
GET /pipeline-news/_search
{
  "query": {
    "match": {
      "content": "中小学"
    }
  },
  "sort": [
    {
      "pubtime": {
        "order": "desc"
      }
    }
  ]
}

# 根据ID查询到结果后,局部更新
POST /pipeline-news/news/5c703cc438f1df1d934f459a/_update
{
  "doc": {
    "cate":"news"
  }
}

elasticsearch提供bool来实现组合多条件查询

match_phrase:
    实现精确匹配

term:
    精确匹配

# 范围搜索
GET /school/_search
{
  "query": {
      "range": {
        "age": {
          "gte": 19,  # gte最小值
          "lte": 20    # lte最大值
        }
      }
  }
}

# 条件组合搜索,两个词去或,存在一个就可以
GET /school/_search
{
  "query": {
    "match": {
      "name": {
        "query": "GetcharZp6 I",
        "operator": "or"
      }
    }
  }
}

fuzzy查询是一个词项级别的查询是 term 查询的模糊等价

wildcard与 prefix 前缀查询的特性类似,与前缀查询不同的是它允许指定匹配的正则式.它使用标准的 shell 通配符查询: ? 匹配任意字符, * 匹配 0 或多个字符


regexp:
    正则表达式匹配

W[0-9].+
    这个正则表达式要求词必须以 W 开头,紧跟 0 至 9 之间的任何一个数字,然后接一或多个其他字符

数据在索引时的预处理有助于提高前缀匹配的效率

prefix 、 wildcard 和 regexp 查询是基于词操作的,如果用它们来查询 analyzed 字段,它们会检查字段里面的每个词,而不是将字段作为整体来处理

 2019.3.25

ES提供了一个叫 bulk 的 API 来进行批量操作

正则查询:regexp

var regex2 = /\[(.+?)\]/g;   // [] 中括号

执行查询并获取该查询的匹配数:count()

在与query同等级的位置加上"_source",将返回"_source"中指定的字段

elastic search最多允许读10000条数据

compile() 函数将一个字符串编译为字节代码

re.findall('\[(.*?)\]', str):
    正则表达式,查找中括号[]中的内容

re.findall('\【(.*?)\】', str):
    正则表达式,查找中括号【】中的内容

a in b:
    可以通过a in b 来判断a是否在b中

HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE

for 属性规定 label 与哪个表单元素绑定

2019.3.26

META标签用来描述一个HTML网页文档的属性,例如作者、日期和时间、网页描述、关键词、页面刷新等

margin是外边距 padding是内边距 

line-height:行高

open(file_path, 'w', encoding='utf-8'):
    可以解决UnicodeEncodeError,关键是加上encoding='utf-8'


"index":{
    "max_result_window" :1000000
}
通过酱紫,from,size可以输入更大的数

Fasttext最大的特点是模型简单,只有一层的隐层以及输出层

微信广告文章分类:fast text

Word2vec,是一群用来产生词向量的相关模型

Fasttext主要有两个功能,一个是训练词向量,另一个是文本分类

词向量的作用:
    为了描述词与词之间的相似程度而构建的高维向量,而视频,音频数据构建本身意义,可以直接通过数据进行描述图像与声音的相似度。

fastText 方法包含三部分:模型架构、层次 Softmax 和 N-gram 特征

logging作用:
    系统或软件、应用的运行情况

supervised:
    用于监督学习

2019.3.27

sys.argv:
    在外部向程序内部传递参数

Python strip():
     方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列

extend():
     向列表尾部追加一个列表,将列表中的每个元素都追加进来

准确率就是找得对,召回率就是找得全

fasttext:
    监督学习:fasttext.supervised()
    数据的测试:fasttext.test

load_model:
    加载模型

precision:
    精准率

positive:正词(广告)

negative:负词(无广告)

label:标签

2019.3.28

Python 的 re 模块提供了re.sub用于替换字符串中的匹配项

词频效应(word frequency effect)是指指人们对高频词的识别快于对低频词的识别

subword:
    用来统计子单词的个数 char

N-gram模型是一种语言模型(Language Model,LM),语言模型是一个基于概率的判别模型,它的输入是一句话(单词的顺序序列),输出是这句话的概率,即这些单词的联合概率(joint probability)

webbrowser.open('')
    打开指定浏览器

tr:表示一行,td:表示一列

在代码的开头加上# coding=gbk
    可以解决Non-UTF-8 code starting with 酱紫的问题

2019.3.29

seek()方法用于移动文件读取指针到指定位置

在自然语言的文本分类中,主要使用两类模型,一类是使用传统的机器学习模型,如朴素贝叶斯,最大熵,支持向量机等

数据转化为 ==> 词向量 ==> 将词向量输入一层神经网络 ==> 预测

NLTK 用于自然语言处理的 Python 库

nltk.word_tokenize(sent) #对句子进行分词

split()当不带参数时以空格进行分割

用log_softmax是因为损失函数用的是NLLLoss() 即负对数似然损失

pytorch 数据的输入类型是
    data = [(str.split(), "classes"),()]

view()就是改变下向量维数

view()函数作用是将一个多行的Tensor,拼接成一行

torch.setdefaulttensortype(‘torch.FloatTensor’)
    设置默认的tensor数据类型

model.parameters()
    返回结果是model里的所有参数

perceptron

 2019.3.19

pytorch实现textCNN

nn包的导入:
    import torch.nn as nn

requires_grad 设置为 True,表明我们想要自动计算梯度,这将用于反向传播中以优化权重

损失函数:描述我们模型的预测距离目标还有多远

优化算法:用于更新权重;

torch.cuda.is_available()
    判断是否存在满足cuda运算的GPU

使用 torch.nn 库构建模型

使用 torch.autograd 库训练模型

将数据封装进 torch.utils.data.Dataset 库

使用 NumPy interface 连接你的模型、数据和你最喜欢的工具

numpy 是一个通用的科学计算框架,它没有计算图、深度学习和梯度的概念

前向传递输入信号直至输出产生误差,反向传播误差信息更新权重矩阵

numpy dot()函数,是将两个向量进行点乘

torch.clamp(input,min,max,out=None)-> Tensor将input中的元素限制在[min,max]范围内并返回一个Tensor

clone()相当于完全复制了之前的tensor,他的梯度也会复制,而且在反向传播时,克隆的样本和结果是等价的

使用自动微分来自动计算神经网络的反向传播

如果 x 是一个 Variable,那么 x.data 则是一个 Tensor,x.grad 是另一个用来保存 x 关于某个标量值的梯度

通过 Variable 的自动求导就不再需要手动地实现反向传播

感知机是一种线性分类模型属于判别模型

2019.4.1

word2vec(word to vector)是一个将单词转换成向量形式的工具。可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相 似度。

word2vec.word2vec('corpusSegDone.txt', 'corpusWord2Vec.bin', size=300,verbose=True)
    即可构建词向量,得到结果放在文件名为 corpusWord2Vec.bin的文件中。可以通过设定size 的大小来指定词向量的维数。

用TaggedLineDocument 实现,每个doc默认编号

感知机是一种线性分类模型属于判别模型

感知机输入为实例的特征向量,输出为实例的类别

感知机实际上表示为输入空间到输出空间的映射函数

输入信号的加权和比阈值高,意味着这个神经元被激活

感知机学习的目标是求得一个能够将训练集正负实例点完全分开的超平面

为了找出这样的超平面,即确定感知机的模型参数w、b,需要定义一个损失函数(成本函数)并将损失函数极小化

损失函数的作用:衡量模型模型预测的好坏

损失函数:度量神经网络的输出的预测值,与实际值之间的差距的一种方式。

感知机模型选择的是采用随机梯度下降,这意味着我们每次仅仅需要使用一个误分类的点来更新梯度。

要将positive和negative打乱,要不然可能只学的到一部分数据

每次仅仅需要使用一个误分类的点来更新梯度

对于w和b的梯度用偏导可以直接求出来

为了保证收敛性,我们需要将 w 初始化为零向量、将 b 初始化为 0

在requests中发送文件的接口只有一种,那就是使用requests.post的files参数

400(Bad request):出现这个请求无效报错说明请求没有进入到后台服务里

2019.4.2

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式

request提交数据的时候提示415的原因可能是传入的数据格式不对,可以考虑切换为json试下

2019.4.3

代价函数(损失函数),最小二乘法

通过相关系数来衡量线性相关性的强弱

梯度下降法

爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息。

调度器:相当于一台电脑的CPU,主要负责调度URL管理器、下载器、解析器之间的协调工作。 

2019.4.4

python要读docx文档,要使用python-docx 模块

logging.basicConfig(level=logging.DEBUG)
设置日志级别,WARN

打印日志:
    login.error(e)

等级由低到高:debugFatal;

Event对象作用:
    设置信号、清除信号、等待

python线程开发使用标准库threading

threading.Thread(target=,  name=', args=')
    通过threading创建一个线程对象,target为目标函数;name为线程别名;args为目标函数传递实参,元组;kwargs为目标函数的关键字传参,字典

python的线程没有优先级,没有线程组的概念,也不能被销毁、停止、挂起,自然也没有恢复、中断

 

你可能感兴趣的:(日记)