一些参考网站
http://c.biancheng.net/view/4360.html
GoogLeNet结构
https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650742982&idx=1&sn=337013362430bb7afd4fc898ad4f78b1&scene=21#wechat_redirect
inception模块
AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如overfit、梯度消失/爆炸。. inception的提出则从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征
Hebbin赫布原理。用一句话概括就是fire togethter, wire together。
使用1x1卷积进行降维,降低了计算复杂度,节省计算量。图2中间3x3卷积和1x1卷积都起到了这个作用。当某个卷积层输入的特征数较多,对这个输入进行卷积运算将产生巨大的计算量;如果对输入先进行降维,减少特征数后再做卷积计算量就会显著减少。。
AlexNet
它本质上就是扩展 LeNet 的深度,并应用一些 ReLU、Dropout 等技巧。
AlexNet 有 5 个卷积层和 3 个最大池化层。
VGG网络
VGG是Oxford的Visual Geometry Group的组提出
VGG16相比AlexNet的一个改进是采用连续的几个3x3的卷积核代替AlexNet中的较大卷积核(11x11,7x7,5x5)。在保证具有相同感知野的条件下,提升了网络的深度,cnn部分减少了参数。
VGG耗费更多计算资源,并且使用了更多的参数(这里不是3x3卷积的锅),导致更多的内存占用(140M)。其中绝大多数的参数都是来自于第一个全连接层。VGG有3个全连接层。有的文章称:发现这些全连接层即使被去除,对于性能也没有什么影响,这样就显著降低了参数数量。
伪标签或自训练方法
应用于许多计算机视觉任务,如图像分类、目标检测、语义分割等。
伪标签方法有一对网络:一个教师网络,一个学生网络。教师网络基于无标签图像生成伪标签,这些被「伪标注」的图像与标注图像结合,用来训练学生网络。
由于使用了大量的伪标签数据和数据增强等正则化方法,学生网络通过学习可以超越教师网络。
尽管伪标签方法性能优越,但它也有一个很大的缺陷:如果伪标签不准确,学生网络就要从不准确的数据中学习。因此,最后训练出的学生网络未必比教师网络强多少。这一缺陷也被称为伪标记的确认偏差(confirmation bias)问题。
ImageNet -
ILSVRC ImageNet large scale visual recognition challenge
ILSVRC使用ImageNet的一个子集,包含1000种类别,每种类别约1000张图像。
ILSVRC总共大约120万张训练图像,50,000张验证图像,以及150,000张测试图像。
验证集是为了 快速调参,也就是用验证集选择超参数(网络层数,网络节点数,迭代次数,学习率这些)。另外用验证集还可以监控模型是否异常(过拟合),然后决定是不是要提前停止训练。
测试集既 不参与参数的学习过程,也 不参与参数的选择过程,仅仅用于模型评价。
验证集可以看做参与了 “人工调参” 的训练过程
一般训练几个 epoch 就跑一次验证看看效果(大部分网络自带这个功能),好处是:可以及时发现模型或者参数的问题,比如模型在验证集上发散
编程习惯:
https://zhuanlan.zhihu.com/p/375661558
在写一个项目时,我会下意识地先建一个Glb.py的模块,用以存放全局变量。因为python这门语言太高级了,反而缺少对于变量作用域的检查。使用Glb.py模块,会非常方便地调用全局变量。
我还有日常维护的xin_error.py模块,用以存放我常用的错误代码。这个模块已经使用很久了,每次找错的时候直接定义成常量放在其中,还能帮我解决bug。
还有各种函数的补充模块,还有我们自己的量化系统模块,等等。
请牢牢地记住:编程的终极目标是复用!而模块,是python中复用的最终一环。
自注意力模型(transformer)
from https://www.bilibili.com/video/BV1v3411r78R?p=1
时间编码
位置编码使用了一组频率来代表位置,没有使用相位。(人脑中有相位?)
位置编码和傅里叶变换----一组角频率的正交基也有相关性,只不过傅里叶变换是将低频放到左面,高频放到右面。离散傅里叶的bin是每条频率的宽度。
嵌入在transformer里的位置编码有些类似二进制的位置编码,只不过为了更好的分辨出前后位置,将二进制序列转换了一些(左面是高频)。
在输入序列中加入位置编码的基本方法
外置的位置编码 vs 内嵌的位置编码
位置编码的基本类型
静态位置编码 Vs 动态位置编码
无论是静态还是动态的位置编码,我们都可以把位置编码当作一个偏置向量
位置编码还可分为
绝对位置编码 Vs 相对位置编码。
from https://zhuanlan.zhihu.com/p/352233973
文字嵌入 RNN模型
https://www.bilibili.com/video/BV1fp4y147Lc
corpus
美[ˈkɔrpəs]
n.语料;文集;
【语】语料库
网络 本金;尸体;躯体
交叉熵就是信息编码的平均长度,一定会大于真实的平均长度(熵)
因为香农定义的信息量是不可压缩的,信息量的熵也是个最小值。
如果交叉熵预测的分布与真实分布不同,预测分布曲线下面积会大于真实分布曲线下面积。最终只有与真实分布相同,才会是最小面积。
代表预测分布的交叉熵面积一定大于真实分布熵面积,这个是吉布斯不等式已经证明了的。
https://www.bilibili.com/video/BV15V411W7VB/
https://www.bilibili.com/video/BV1KK4y1f7TM/
permute [pə'mjuːt]
v.交换;取代;置换;排列
变更;广义转置;改变顺序
向量积,数学中又称外积、叉积,物理中称矢积、叉乘。
叉积的长度|a×b|可以解释成这两个叉乘向量a,b共起点时,所构成平行四边形的面积。
求解光照的核心在于求出物体表面法线,而叉积运算保证了只要已知物体表面的两个矢量,就可依靠叉积求得法线。
数量积(dot product; scalar product),向量的点积得到两个向量的夹角的cos值,通过它可以知道两个向量的相似性
数组类型 --元组 与 列表 的区别:
元组 是不可改变的,为了保护其内容不被外部接口修改,不具有 append,extend,remove,pop,index这些功能;而 列表 是可更改的。
两者 相互转换 ,tuple ()相当于冻结一个 列表 ,而list()相当于解冻一个 元组
列表、元组、字典、集合的区别
列表:顺序存储结构,占更多存储空间(默认存了指针),用"[ ]“表示。
元组:和列表在结构上没有区别,唯一的差异在于元组是只读的。用“( )”表示。
字典:字典定义了键和值之间一对一的关系,但以无序方式储存。用大(花)括号”{ }"。(其中前三个也可称之为Python的数组类型)
集合:用的比较少,无序不重复元素集。
元组的所有元素都放在一对小括号( )中,相邻元素之间用逗号,分隔,如下所示:
(element1, element2, ... , elementn)
元组可以存储整数、实数、字符串、列表、元组等任何类型的数据,并且在同一个元组中,元素的类型可以不同,例如:
("c.biancheng.net", 1, [2,'a'], ("abc",3.0))
在 Python 中,元组通常都是使用一对小括号将所有元素包围起来的,但小括号不是必须的,只要将各元素用逗号隔开,Python 就会将其视为元组。
当创建的元组中只有一个字符串类型的元素时,该元素后面必须要加一个逗号,否则 Python 解释器会将它视为字符串
为什么有了列表还要有元组、字典、集合?
降低程序的时间复杂度
比如字典:Python字典因为在存储元素时,将key哈希转化到了存储地址,所以如果要在字典里查找某个元素的key,不需要循环字典,只需要进行同样的哈希计算就可以得到了。
————————————————
版权声明:本文为CSDN博主「阿阿啊波」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_51034755/article/details/114680651
np.arange()
函数返回一个有终点和起点的固定步长的数组,如[1,2,3,4,5] 。
np.arange()函数 参数
1)一个参数:起点默认值0,终点,步长默认值1。
2)两个参数:起点,终点,步长取默认值1。
3)三个参数:起点,终点,步长。(步长支持小数)
获取各个列分别占用的内存
可以使用 DataFrame 类型的 memory_usage(deep=True)
import matplotlib.pyplot as plt
x=[3,4,5] # [列表]
y=[2,3,2] # x,y个数应相同
plt.plot(x,y)
plt.show()
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x=np.array([[0,1,2],[3,4,5],[6,7,8]])
y=np.array([[2,3,2],[3,4,3],[4,5,4]] )
print(x)
print(y)
plt.plot(x,y)
plt.show()
Python报错:SyntaxError: (unicode error) 'unicodeescape' codec can't decode...
原因:Linux的路径符号/和window的路径符号\不同 ,\字符被当作转义字符来使用,经过转义之后可能就找不到路径的资源了,例如\t会转义为tab键
解决方法:
一:更换为绝对路径的写法 func1("C:\\Users\\renyc")
二:显式声明字符串不用转义(加r) func1(r"C:\Users\renyc")
三:使用Linux的路径/ func1("C:/Users/renyc")
Fashion-MNIST
变换
https://www.cnblogs.com/kuronekonano/p/12392103.html
仿射变换
仿射变换 是 线性变换,且保持二维图形的“平直性”和“平行性”。
仿射变换可以通过一系列的原子变换的复合来实现,包括平移,缩放,翻转,旋转和剪切。
平移(translation)和旋转(rotation) 顾名思义,两者的组合称之为 欧式变换(Euclidean transformation) 或 刚体变换(rigid transformation);
放缩(scaling) 可进一步分为 uniform scaling和non-uniform scaling,前者每个坐标轴放缩系数相同(各向同性),后者不同;如果放缩系数为负,则会叠加上反射(reflection)——可以看成是特殊的scaling;
相似变换(similarity transformation),刚体变换+uniform scaling ,即平移+旋转+各向同性的放缩;
剪切变换(shear mapping) 将所有点沿某一指定方向成比例地平移
正态分布(Normal distribution)
也称“常态分布”,又名高斯分布(Gaussian distribution),正态曲线又称钟形曲线。
若随机变量X服从期望为μ、方差为σ2的正态分布,记为N(μ,σ2)。期望值μ决定了其位置,其标准差σ决定了分布的幅度。
当μ = 0,σ = 1时的正态分布是标准正态分布。
如果误差的分布是正态分布,那么最小二乘法得到的就是最有可能的值。
https://www.zhihu.com/question/37031188
https://zhuanlan.zhihu.com/p/158683846
什么是软链接
软链接Soft Link , 又称符号链接Symbolic Link(symlink),是一种特殊的文件,它指向 Linux 系统上的另一个文件或目录。
这和 Windows 系统中的快捷方式有点类似,链接文件中记录的只是原始文件的路径,并不记录原始文件的内容。
什么是硬链接
硬链接是原始文件的一个镜像副本。创建硬链接后,如果把原始文件删除,链接文件也不会受到影响,因为此时原始文件和链接文件互为镜像副本。
为什么要创建链接文件而不直接复制文件呢?当你需要将同一个文件保存在多个不同位置,而且还要保持持续更新的时候,硬链接的重要性就体现出来了。如果你只是单纯把文件复制到另一个位置,那么另一个位置的文件只会保存着复制那一刻的文件内容,后续也不会跟随着原始文件持续更新。而使用硬链接时,各个镜像副本的文件内容都会同时更新。
创建conda环境
查看当前环境:
在conda环境下,输入conda env list(或者输入conda info --envs也是一样滴)
创建一个新的python2的环境,
conda create -n python2 python=2
# -n: 设置新的环境的名字
# python=2 指定新环境的python的版本,非必须参数
# 可以用一个-y参数,可以直接跳过安装的确认过程。
启动这个环境
输入conda activate python2就可以
退出环境
conda deactivate
删除环境
condaremove-n myenv--all
conda安装特定的版本:
conda install 软件名=版本号
例如: conda install gatk=3.7 GATK ( The Genome Analysis Toolkit)是 用于二代重测序基因数据分析 工具
这时conda会先卸载已安装版本,然后重新安装指定版本。
linux root用户下安装anaconda,如何让普通用户使用root用户安装的python
在root下默认路径在/root目录下,这样其实普通用户是没有权限访问这个目录的,
解决办法:
1 在root下安装anaconda时装在/opt这个目录下
2 普通用户登陆后,执行以下语句,使conda的路径等系统环境变量信息写入当前用户的bashrc,
/opt/anaconda/bin/conda init bash
source .bashrc
corpus()
语料库
python strip() 函数
strip可以删除字符串的某些字符
strip(s【字符串】,rm【要删除的】)
【当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' ')】
s.strip(rm) 删除 开头、结尾处的字符
s.lstrip(rm) 只删除 开头处的字符
s.rstrip(rm) 只删除 结尾处的字符
https://zhuanlan.zhihu.com/p/76612334
python split() 函数
split则是分割的意思,split根据规定的字符将字符串进行分割。
https://zhuanlan.zhihu.com/p/76612334
马尔科夫假设:
马尔科夫为了简化问题,提出了一种简化的假设,
即随机过程中各个状态St的概率分布,只与它的有限个状态有关
strip()用来删除一些字符
如果首位有空格,就无法删除这些字符
.replace()
对象.replace(rgExp,replaceText,max【可选参数】)
re.sub()
re.sub()有5个函数,
re.sub(pattern,repl,string,count,flags)
re.sub(正则表达式中的模式字符串,被替换的,要被替换的字符串,匹配的次数【可选参数】,flags【可选参数】)
多层感知机(MLP,Multilayer Perceptron)
也叫人工神经网络(ANN,Artificial Neural Network),
20211100
学习笔记 准确度,精确度,召回
from: https://www.bilibili.com/video/BV1tQ4y1S7Ty?spm_id_from=333.999.0.0
视频播放位置 15分钟。
准确度Accuracy
是衡量模型整体的正确率,
但是整体的正确率高不代表模型一定好。比如100个人,只有2个有病,体检的时候出具了都健康的报告,这时候模型的正确率是98%,但是漏掉了重要的目标。
精确度Precision
反应了某一个子类预测的正确率,比如预测 100次,90次都预测正确,精确度就是90% 。精确度高 好比射击子弹散布小,很准。
但是某一类的精确度高不一定代表模型好。比如将模型追求精确度,调整到很高置信率时才预测,这会漏掉很多应该预测的时机。
召回率 Recall
反应了某一个子类 实际预测正确数量占应预测数量比重。
这个和精确度是对矛盾。
视觉化
举个简单的模型,二分类模型。最理想情况下可以将2个组完全分开,是2个完全分离的正态分布。
但是实际情况下不能完全分开,2个正态分布有交错。
精确度Precision 和召回率 Recall 需要做出某些妥协。
ROC曲线,AUC面积( ROC曲线下面的面积)
One Class SVM
是指你的training data 只有一类positive (或negative)的data, 而没有另外的一类。
左边是在original space中的boundary, 比较靠谱的是找一个比较 紧(closeness) 的boundary (红色的)。
图片分类 目标检测 语义分割 实例分割
对象.replace(rgExp,replaceText,max)
max是可选的参数