NLP入门
本文主要介绍自然语言处理(Natural Language Processing:NLP)中的一些最基础的概念,可以帮助读者在整体上感知这一领域,算是一篇入门博客。
词库 Vocabulary,表示所有词的集合。一般而言,经过one-hot encoding之后的向量的长度即为词库的大小。
语料库 Corpus,由词库里所有的词组成的句子,短语等语料信息,可以简单理解为一个/多个documents。
词向量 Word Vector,就是把一个Word表示成一个向量(vector),最常见的有one-hot encoding。
分布的假设 我们知道一个单词最原始的表达方式(Word Representation)是one-hot encoding,但是这种方式是有缺陷的,它仅仅将单词符号化,不包含任何语义信息。那如何才能表达出一个词的语义呢?Harris 在 1954 年提出的分布假说( Distributional Hypothesis)为这一设想提供了理论基础:上下文相似的词,其语义也相似。 这个很好理解,比如有如下两句话:
I like drinking o ...
pprint
1. 引言pprint的英文全称Data pretty printer,顾名思义就是让显示结果更加直观漂亮。
print()和pprint()都是python的打印模块,功能基本一样,唯一的区别就是pprint()模块打印出来的数据结构更加完整,每行为一个数据结构,更加方便阅读打印输出结果。特别是对于特别长的数据打印,print()输出结果都在一行,不方便查看,而pprint()采用分行打印输出,所以对于数据结构比较复杂、数据长度较长的数据,适合采用pprint()打印方式。
在介绍完上述理论知识后,我们不妨来举个栗子吧!
2. 使用背景我们来看一个打印嵌套字典的例子,如下所示:
d = { "apple": {"juice":4, "pie":5}, "orange": {"juice":6, "cake":7}, "pear": {"cake":8 ...
timm
1 什么是timm库? timm 是 PyTorch Image Models 的缩写 is a collection of SOTA computer vision models, layers, utilities, optimizers, schedulers, data-loaders, augmentations and also training/validating scripts with ability to reproduce ImageNet training results.
timm 库实现了最新的几乎所有的具有影响力的视觉模型,它不仅提供了模型的权重,还提供了一个很棒的分布式训练和评估的代码框架,方便后人开发。timm 库是由 Ross Wightman 开发和维护的
项目地址:https://github.com/huggingface/
2 最快上手使用一个timm模型 问:使用timm搭建一个可以使用的CNN或ViT共需要几步?
答:4步
0.安装 timm
1.import timm
2.创建model
3. ...
AP隔离
最近在学校使两台linux主机通过UDP通信,但发现无法发送UDP报文,互相也无法ping通,奇怪的是主机处于同一个局域网(校园网),且均没有开启防火墙,经过上网寻找解决方案发现是AP隔离的原因
很多自己最装过无线路由器的都知道,AP隔离是一种路由模式。AP隔离指的是开启之后,各个连接的设备不能互相通讯,起到隔离的作用,来保障不同用户的安全
AP隔离,英文术语:AP Isolation多见于无线通信方面,常见于路由器设置中。AP隔离非常类似有线网络的VLAN(虚拟局域网),将所有的无线客户端设备之间完全隔离,使客户端只能访问AP接入的固定网络。
适用范围:该措施非常适合大型的会议室、酒店、机场等公共场所的无线网络建设,让各个接入的无线客户端之间相互保持隔离,提供彼此间更加安全的接入。该措施对于家庭用户来说没有太多的实际意义,但企业用户在一些特殊的场合可以采用这种方式来加强无线网络的安全性。例如有客户或外单位人员参加的会议等公共活动。该方法用于对酒店和机场等公共热点Hot Spot的架设,让接入的无线客户端保持隔离,提供安全的Internet接入。
无线路由器中ap隔 ...
Python中的w3lib
目前在做的项目中遇到一个需求:将爬取到的大量网页中的文本提取出来。由于网页太多,无法逐个分析使用xpath表达式进行提取。使用正则表达式可以实现,但太麻烦。这里介绍一款专业处理这方面问题的包w3lib
w3lib简介 w3lib是一个Python包,实现了一下与web相关的功能:
从html片段中移除注释或者标签
从html片段中提取base url
对html串中的字符实体进行转义
将原始HTTP头转换为字典格式
构造HTTP的认证报头
将html页面转换成unicode编码格式
从urls中提取参数
w3lib主要包括四个模块:
html模块:处理与html标签相关的问题
http模块:处理与http报文相关的问题
url模块:处理与url地址相关的问题
encoding模块:处理与编码格式相关的问题
实例片段 w3lib是scrapy的依赖包,所有当我们安装好scrapy后不需额外安装w3lib。这里主要用到了html模块,关键代码段如下:
from w3lib.html import remove_tagsfrom w3lib.html import rep ...
Python中的pickle
pickle一、pickle是什么? 在英语中 pickle 名词是泡菜,动词是腌渍的意思。可以理解为把东西腌起来保存成文件,要用的时候读出来洗洗再用。
python的pickle模块实现了基本的数据序列化和反序列化。
序列化对象可以在磁盘上保存对象,并在需要的时候读取出来。任何对象都可以执行序列化操作。
pickling是将Python对象层次结构转换为字节流的过程。
unpickling是反向操作,从而将字节流(来自二进制文件或类似字节的对象)转换回对象层次结构。
1.pickle的优缺点1、优点:
pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。
通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。
python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化。
没有外部标准强加的限制,例如JSON或XDR(不能代表指针共享)。
默认情况下,pickle数据格式使用相对紧凑的二进制表示。如果需要最佳尺寸特征,则可以有效地压缩数据。
pickle可以表 ...
Python字符串前面加字母
python字符串前的字母的含义:b\r\f\u
1、字符串前加 u例:u”我是含有中文字符组成的字符串。”
作用:重要的作用是用来指明后面字符串的编码方式;
后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。
2、字符串前加 r例:r”\n\n\n\n” # 表示一个普通字符串 \n\n\n\n,而不表示换行了。
作用:将字符串中的具有特殊含义的字符意义去掉,比如:\n表示换行,若前面加上r, 即:r’\n’,就表示一个斜行和小写字母n了。
去掉反斜杠的转义。
(特殊字符:即那些,反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的”\n”表示换行,”\t”表示Tab等。 )
应用:常用于正则表达式,对应着re模块。
3、字符串前加 b例: response = b’Hello World!‘ # b’ ‘ 表示这是一个 bytes 对象
作用:将字符串表示为:字节对象类型,类型:bytes
b” “前缀表示:后面字符串是bytes 类型。
用处:网络编程中,服务器和浏览器只认bytes ...
windows虚拟环境装tf2.6
本来安装tensorflow-gpu是一句话的事情,但因为版本变动,今天安装遇到很多麻烦,简单记录
之前是装了tensorflow-gpu==2.6.0的版本的,但后来在这个环境中安装了sionna,这个可恶的库居然直接卸载了我的tensorflow-gpu==2.6.0,安装了满足它要求的13版本tensorflow,而且还是cpu版本的,安装之前都没问我要不要安装,真可恶啊,导致我不得不重新安装tensorflow-gpu
首先创建3.9版本python环境,然后conda install tensorflow-gpu==2.6.0安装,记得科学上网
安装完后,再conda install keras==2.6.0安装keras
这时候已经自动安装了cudatoolkit、cudnn、tensorflow-gpu、keras、numpy等
你以为行了?
print(tf.__version__)报错,说是numpy不再有object属性,那可以推断numpy版本过高,pip卸载numpy重新安装低版本即可(后来知道 ...
关于DeepJSCC的思考
复现DeepJSCC后,有一些想法
这是关于图像语义传输的文章,发送和接收端都采用端到端联合设计的思路
当数据集为32×32×3的CIFAR10时:
encoder:16×16×16——>32×8×8——>32×8×8——>32×8×8——>16×8×8 最后一个16控制压缩率,目前1/6
decoder:32×8×8——>32×8×8——>32×8×8——>16×16×16——>3×32×32
当数据集为224×224×3的ImageNet时:
encoder:16×112×112——>32×56×56——>32×56×56——>32×56×56——>16×16×16 最后一个16控制压缩率,目前1/6
decoder:32×56×56——>32×56×56——>32×56×56——>16×112×112——>3×224×224
总结:从不同尺寸的输入图像可以看出,对于特征图的尺寸,最好严格按照×2或者÷2的规模变化,而对于特征维度 ...
JSCC中为什么无法使用复数信道
背景 JSCC(Joint Source Channel Coding)联合信源信道编解码主要使用DNN实现E2E的通信系统,为了适应信道,就需要将信道嵌入到网络中训练。如果使用信道冲激响应复数表示信道,那么势必要在网络中涉及复数运算。
而我们知道目前的深度学习框架都不支持复数微分,这很难解决,因此在JSCC等涉及到将信道嵌入到网络中的情况时,都无法使用复数信道。
解决? 在Pytorch中,之前尝试过解决这个问题,使用with torch.no_grad()或者.detach()将复数运算脱离网络,然后再将计算结果通过requires_grad添加到计算图中,但实际效果非常差,这或许完全不能解决问题,因此想摸清原因。
原因 要想知道原因,这就需要知道with torch.no_grad()和.detach()的工作机制,分别进行介绍。
requires_grad熟悉
官网说:If autograd should record operations on the returned tensor. Default: False.
是否追踪在张量上计算的所有操作,默认值为F ...