琐碎知识点--概念

1 c和c++和python

Python从设计之初就已经是一门面向对象的语言
C语言是结构化和模块化的面向过程的语言,
C++语言是面向对象的程序设计语言。
C++语言是C语言的超集,也就是说学会了C++,你其实已经把C语言学会了。至于说有什么区别,应该说是编程思想的区别吧,C是基于过程的,强调的是程序的功能,以函数(功能)为中心。C++是面向对象的,强调程序的分层、分类,以抽象为基础,进行对象的定义与展示,即程序设计。具体说来话长。建议你学习C++的时候,学会用面向对象的方式思考和编程。现在在开发大项目的时候,都是应用面向对象的分析和设计的技术。
C语言与C++的区别有很多:
1,全新的程序程序思维,C语言是面向过程的,而C++是面向对象的。
2,C语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中;而C++对于大多数的函数都是有集成的很紧密,特别是C语言中没有的C++中的API是对Window系统的大多数API有机的组合,是一个集体。但你也可能单独调用API。
3,特别是C++中的图形处理,它和语言的图形有很大的区别。C语言中的图形处理函数基本上是不能用在中C++中的。C语言标准中不包括图形处理。
4,C和C++中都有结构的概念,但是在C语言中结构只有成员变量,而没成员方法,而在C++中结构中,它可以有自己的成员变量和成员函数。但是在C语言中结构的成员是公共的,什么想访问它的都可以访问;而在VC++中它没有加限定符的为私有的。
4,C语言可以写很多方面的程序,但是C++可以写得更多更好,C++可以写基于DOSr程序,写DLL,写控件,写系统。

2 张量 数组 节点操作(op)

1
op是描述张量中的运算关系,是通过访问张量的属性找到的
2

Tensor("a:0", shape=(2,), dtype=float32)

在张量中并没有保存真正的数字,它保存的是如何得到这些数字的计算过程。
TensorFlow计算的结果不是一个具体的数字,只是一个张量的结构。从上面的代码的运行结果可以看出,一个张量中主要保存了三个属性:名字(name)、维度(shape)和类型(type)。
name属性是一个张量的唯一标识符,同样也给出了这个张量是如何计算出来的
shape属性是张量的维度,描述了张量的维度信息(程序中a变量的维度为2, c的为3)
type属性表示出一个张量只有一个唯一的类型

如果不指定type,TensorFlow会给出默认类型。不带小数点的默认int32,带小数点的默认float32。由于使用默认类型可能会带来类型不匹配的问题,一般会通过dtype来明确指出变量或常量的类型。

3 _x 和 __x 和__x__

_x 可以在你想声明为私有的方法和属性前加上单下划线,以提示该属性和方法不应在外部调用.如果真的调用了也不会出错,但不符合规范.
Python中不存在真正的私有方法。为了实现类似于c++中私有方法,可以在类的方法或属性前加一个“_”单下划线,意味着该方法或属性不应该去调用,它并不属于API

__x 它并不是用来标识一个方法或属性是私有的,真正作用是用来避免子类覆盖其内容
在我们创建一个以"__"两个下划线开始的方法时,这意味着这个方法不能被重写,它只允许在该类的内部中使用

双斜划线x双斜划线代表python里特殊方法专用的标识,如init()代表类的构造函数

4 栈

top就是栈顶,指的是最后一个push进去的元素。
在这里插入图片描述

设栈的顺序存储空间为 S(1:m),初始状态为top=-1,则栈中的数据元素个数为top+1
初始bai状态为top=-1,说明栈空时top=-1;入栈时du栈顶指针是加操作,每入栈一个zhi元素,则栈顶指针top的值加1。故dao栈中元素的个数应为top+1.

设栈的顺序存储空间为 S(1:m),初始状态为top=m+1,则栈中的数据元素个数为m-top+1
当初始状态为top=m+1时,栈空时top指针为m+1,入栈时栈顶指针是减操作,每入一个,则top减1,设此时 元素为x,则m+1-x=top,可得元素个数为x=m-top+1.

s(1:m)的意思是这个栈占用的是1号到m号储存空间,初始状态为top=m+1意思是空栈时top指针指向m+1号储存空间。潜台词是这个栈栈底空间的标号是m,栈顶空间的标号是1,是个倒栈,不一般。
栈中的元素与栈底和栈顶是有关系哒,它们之间哒关系是:栈中元素个数=栈顶指针-栈底指针
栈的顺序存储空间为S(1: m),初始状态top=m+1, 说明这个栈是m在栈底,1是在栈顶的。这题可以假设栈中有x个元素,当X=0时,也就是栈中没有元素,则Top=m+1,当X=m时,也就是栈满,则Top=1
没有规定栈中栈底必须是0。 如果说初始状态top=0,说明这个栈是1在栈底,m在栈底的
如果是0到10也只有10个元素,栈顶是不存储元素值的,只有0到9的位置有元素。

由于栈的存储空间S(a:b)中b是大于a的,而且由于在栈中栈底指针在下面而栈顶指针在栈的上面,栈中所有元素进出栈的顺序都是“先进后出”的所以我们说:栈是倒压着的。
在这里插入图片描述

5训练集是否放打乱

https://www.zhihu.com/question/309783805
打乱好
个人觉得这个挺正常的,首先不知道你训练的时候有没有打乱顺序,无论是训练还是验证都应该打乱顺序的,打乱顺序是为了使每一个batch的样本特征的分布尽可能的与全部样本的特征分布相同,举个例子:比如说做人脸识别,有8张图像的鼻子特征更明显一些,有8张图像的嘴巴特征更明显一些,你用鼻子特征更明显的模型识别嘴巴特征更明显的图像效果就会差一些,如果不进行随机,可能就会有一个batch进入的都是鼻子特征明显的图像,同时有可能有一个batch进入的是嘴巴特征明显的图像,这两个batch的验证结果就会不一样。感觉这是一种均匀分布的思想

原始数据存在一定的分布规律,所以学习曲线不平滑,如果数据量够大的话,打乱后会呈现随机分布,学习后更能体现样本的共性。举个简单例子,我们中学时代都参加了无数的考试,为了考试我们会做很多套卷子,每套卷子上都会有选择题、填空题、判断题、问答题等等类型的题型,试想一下如果我们花一个月时间天天练习选择题,然后再花一个月时间天天练习填空题,再花一个月时间天天练习判断题,最后花一个月时间练习问答题,短期来看每中类型的题目我们都会做得很好,但把时间维度拉长,当我们练习完问答题的时候也许做填空题的能力已经大不如前。不管是什么训练网络都会出现这种问题,并不是残差网络才会出现这个现象。

6 注意力机制

https://blog.csdn.net/hpulfc/article/details/80448570
https://www.zhihu.com/question/68482809/answer/264632289
**人:**大脑会自动忽略低可能、低价值的信息。
如看蒙娜丽莎的微笑时,会首先看到蒙娜丽莎的嘴巴,而忽视她的手

在这里插入图片描述

深度学习:

1.分类
例如,识别鸟类的品种问题。对于鸟品种的精细分类,对结果影响最大的可能是鸟类的头部,通过注意力机制将头部的特征强化,而忽略其他部分(羽毛、爪子),以实现区分鸟类的具体品种

2. 翻译
在这里插入图片描述

如果拿机器翻译来解释这个分心模型的Encoder-Decoder框架更好理解,比如输入的是英文句子:Tom chase Jerry,Encoder-Decoder框架逐步生成中文单词:“汤姆”,“追逐”,“杰瑞”
在这里插入图片描述
其中 f 是Decoder的非线性变换函数。从这里可以看出,在生成目标句子的单词时,不论生成哪个单词,它们使用的输入句子Source的语义编码C都是一样的,没有任何区别。
而语义编码C是由句子Source的每个单词经过Encoder 编码产生的,这意味着不论是生成哪个单词,y1,y2还是y3,其实句子Source中任意单词对生成某个目标单词yi来说影响力都是相同的,这是为何说这个模型没有体现出注意力的缘由。这类似于人类看到眼前的画面,但是眼中却没有注意焦点一样。


在翻译“杰瑞”这个中文单词的时候,分心模型里面的每个英文单词对于翻译目标单词“杰瑞”贡献是相同的,很明显这里不太合理,显然“Jerry”对于翻译成“杰瑞”更重要,但是分心模型是无法体现这一点的,这就是为何说它没有引入注意力的原因。
上面的例子中,如果引入Attention模型的话,应该在翻译“杰瑞”的时候,体现出英文单词对于翻译当前中文单词不同的影响程度,比如给出类似下面一个概率分布值:

(Tom,0.3)(Chase,0.2) (Jerry,0.5)

在这里插入图片描述
即生成目标句子单词的过程成了下面的形式:
在这里插入图片描述
经过Softmax进行归一化就得到了符合概率分布取值区间的注意力分配概率分布数值

7 batchnorm原理理解

https://blog.csdn.net/jiang_ming_/article/details/82314287
https://blog.csdn.net/qq_25737169/article/details/79048516
使用:https://www.cnblogs.com/zyly/p/8996070.html
为什么用:https://blog.csdn.net/qq_34107425/article/details/106889422
  一种正则化的方法。所谓的BN是指在数据经过一层进入下一层之前,需要对数据进行归一化,使之均值为0,方差为1。这样可以使得各层的参数量级上没有太大的差别。
在神经网络中,有这样的一个问题:Internal Covariate Shift。

BN层提出来的本质就是为了解决反向传播中的梯度问题(梯度爆炸)。产生梯度爆炸的原因就是因为网络的内部协变量转移(Intenal Covariate Shift),即正向传播时不同层的参数会将反向训练计算时所参照的数据样本分布改变。
假设第一层的输入数据经过第一层的处理之后,得到第二层的输入数据。这时候,第二层的输入数据相对第一层的数据分布,就会发生改变,所以这一个batch,第二层的参数更新是为了拟合第二层的输入数据的那个分布。然而到了下一个batch,因为第一层的参数也改变了,所以第二层的输入数据的分布相比上一个batch,又不太一样了。然后第二层的参数更新方向也会发生改变。层数越多,这样的问题就越明显。

但是为了保证每一层的分布不变的话,那么如果把每一层输出的数据都归一化0均值,1方差的标准高斯分布, 这样就会保留样本分布特征的同时,又消除了层与层之间的分布差异?但是这样就会完全学习不到输入数据的特征了。不管什么数据都是服从标准正太分布,想想也会觉得有点奇怪。所以BN就是增加了两个自适应参数,可以通过训练学习的那种参数。这样吧每一层的数据都归一化到ββ均值,γγ标准差的正态分布上。

【将输入分布变成正态分布,是一种去除数据绝对差异,扩大相对差异的一种行为,所以BN层用在分类上效果的好的。对于Image-to-Image这种任务,数据的绝对差异也是非常重要的,所以BN层可能起不到相应的效果。】
归一化后收敛很快,并具有很强的泛化能力,也有轻微的正则化功能。

8 学习率

PyTorch学习之六个学习率调整策略 https://blog.csdn.net/chanbo8205/article/details/89283226
TensorFlow中设置学习率的方式https://www.cnblogs.com/chenzhen0530/p/10632937.html

9激活函数以及为什么要用

https://www.cnblogs.com/XDU-Lakers/p/10557496.html
加入非线性激励函数后,神经网络就有可能学习到平滑的曲线来分割平面,而不是用复杂的线性组合逼近平滑曲线来分割平面,使神经网络的表示能力更强了,能够更好的拟合目标函数
在这里插入图片描述

10 各种卷积

https://mp.weixin.qq.com/s?__biz=MzI2MDE5MTQxNg==&mid=2649693254&idx=1&sn=e2515062a52a8bc11040557893b82bd8&scene=0#wechat_redirect

https://www.jiqizhixin.com/articles/2019-02-28-3

1 x 1卷积在论文《Network In Network》中提出来。并且在Google发表的《Going Deeper with Convolution》中也有用到。1 x 1卷积的优势如下:
降低维度以实现高效计算
高效的低维嵌入,或特征池
卷积后再次应用非线性

11 tensorflow和pytorch

https://blog.csdn.net/happyday_d/article/details/103229662
TensorFlow 使用静态图,这意味着我们先定义计算图,然后不断使用它,而在 PyTorch 中,每次都会重新构建一个新的计算图。他们之间的区别和差异如下::
动态图计算意味着程序将按照我们编写命令的顺序进行执行。这种机制将使得调试更加容易,并且也使得我们将大脑中的想法转化为实际代码变得更加容易。
而静态计算则意味着程序在编译执行时将先生成神经网络的结构,然后再执行相应操作。而静态图计算是通过先定义后运行的方式,之后再次运行的时候就不再需要重新构建计算图,所以速度会比动态图更快。从理论上讲,静态计算这样的机制允许编译器进行更大程度的优化,但是这也意味着你所期望的程序与编译器实际执行之间存在着更多的代沟。
这也意味着,代码中的错误将更加难以发现(比如,如果计算图的结构出现问题,你可能只有在代码执行到相应操作的时候才能发现它

12 dropout

TF的参数是保留结点的概率,keras,Torch是删掉结点的概率!
tf.layers.dropout<===>tf.nn.dropout(wx_plus_b,keep_prob)
model.add(Dropout(0.02))
torch.nn.Dropout(0.5)

13 MASK

https://blog.csdn.net/Gavinmiaoc/article/details/80856246
感兴趣的区域是白色的,表明感兴趣区域的像素都是非0,而非感兴趣区域都是黑色,表明那些区域的像素都是0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值