From eb008ca3a5e69bd4be105e0cf3fba2d06c2cc784 Mon Sep 17 00:00:00 2001
From: ninglang
定义一个二维数组如下:
+int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} }; |
如果采用一个指针去指向这个数组,可以这么做:
+int (*p)[4]=a; //4代表了一行有多少个元素 |
其中*p
要加括号,因为不加括号就是指针数组,而且但是,这时候的*p
(p指针指向的数据不在是一个int
的数,而是一个数组,代表的是第i行的所有元素)
sizeof(*p); |
那么访问这个二维数组的指针方法是:
+a[i][j]=*(*(p+i)+j); |
当然,下面这种方式也对(和一维数组的指针一样)
+a[i][j]=p[i][j]; |
char *strs[3] ={"chinese","zhonguo" } ;//3代表两个string元素,一个'\0' |
这里使用的就是指针数组,所以这里是3(数组中元素的个数+1),而上面的那个是4数组个每个元素的下一级个数。
+int q[4]; |
这是我现在使用的方法,并不是十分的好,希望有所改进
+//习题5-18 |
int **p; |
int
有用吗?*((int *)a+n*i+j); |
T sum(){ |
//为什么Base和Derived的虚函数地址一样呢 |
问:Base中的虚函数和Derived的虚函数的地址为什么是一样的呢
答:
虚表指针指向了一个虚表,虚表中存放着类中的虚函数。如果类中存在虚函数,那么构造对象的时候,就会生一个虚表指针指向虚表,虚表中存放虚函数。所以,要注意的一-点, +在类的构造函数中不要调用虚函数,这是一一个危险的动作,因为很可能它还未 +初始化完毕。
+
|
|
|
注意:这里Length
返回值只能是1.0,不能是1,否者将会不准确。
|
定义一个二维数组如下:
-int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} }; |
如果采用一个指针去指向这个数组,可以这么做:
-int (*p)[4]=a; //4代表了一行有多少个元素 |
其中*p
要加括号,因为不加括号就是指针数组,而且但是,这时候的*p
(p指针指向的数据不在是一个int
的数,而是一个数组,代表的是第i行的所有元素)
sizeof(*p); |
那么访问这个二维数组的指针方法是:
-a[i][j]=*(*(p+i)+j); |
当然,下面这种方式也对(和一维数组的指针一样)
-a[i][j]=p[i][j]; |
char *strs[3] ={"chinese","zhonguo" } ;//3代表两个string元素,一个'\0' |
这里使用的就是指针数组,所以这里是3(数组中元素的个数+1),而上面的那个是4数组个每个元素的下一级个数。
-int q[4]; |
这是我现在使用的方法,并不是十分的好,希望有所改进
-//习题5-18 |
int **p; |
int
有用吗?*((int *)a+n*i+j); |
T sum(){ |
//为什么Base和Derived的虚函数地址一样呢 |
问:Base中的虚函数和Derived的虚函数的地址为什么是一样的呢
答:
虚表指针指向了一个虚表,虚表中存放着类中的虚函数。如果类中存在虚函数,那么构造对象的时候,就会生一个虚表指针指向虚表,虚表中存放虚函数。所以,要注意的一-点, -在类的构造函数中不要调用虚函数,这是一一个危险的动作,因为很可能它还未 -初始化完毕。
-
|
|
|
注意:这里Length
返回值只能是1.0,不能是1,否者将会不准确。
--模式识别是对数据中的模式和规律性的自动识别。它在统计数据分析、信号处理、图像分析、信息检索、生物信息学、数据压缩、计算机图形学和机器学习中都有应用。模式识别起源于统计学和工程学;一些现代的模式识别方法包括使用机器学习,这是由于大数据可用性的增加和处理能力的新丰富. -这些活动可以看作是同一个应用领域的两个方面,在过去的几十年里都得到了长足的发展。
-
Pattern -recognition - Wikipedia
-L1 -and L2 Regularization Methods. Machine Learning | by Anuja Nagpal | -Towards Data Science
---GAN是一个有趣的想法,最初被引入2014 -年,由 Ian Goodfellow(现供职于 -OpenAI)领导的蒙特利尔大学的一组研究人员。GAN -背后的主要思想是拥有两个相互竞争的神经网络模型。一个将噪声作为输入并生成样本(因此称为生成器)。另一个模型(称为鉴别器)从生成器和训练数据中接收样本,并且必须能够区分这两个来源。这两个网络玩一个连续的游戏,其中生成器正在学习生成越来越多的真实样本,而鉴别器正在学习越来越好地将生成的数据与真实数据区分开来。这两个网络是同时训练的,希望通过竞争来驱动生成的样本与真实数据无法区分。
- -这里经常使用的类比是,生成器就像试图制造一些伪造材料的伪造者,而鉴别器就像试图检测伪造物品的警察。这种设置似乎也让人想起强化学习,其中生成器从鉴别器接收奖励信号,让它知道生成的数据是否准确。然而,与 -GAN -的主要区别在于我们可以将梯度信息从鉴别器反向传播回生成器网络,因此生成器知道如何调整其参数以产生可以欺骗鉴别器的输出数据。
-
An -introduction to Generative Adversarial Networks (with code in -TensorFlow)
--- -minmax(有时称为Minimax、MM -[1]或鞍点[2])是人工智能、决策论、博弈论、统计学和哲学中用于最小化最坏情况(最大损失)场景的可能损失的决策规则. -在处理增益时,它被称为“maximin”——最大化最小增益。最初是为多人零和博弈论制定的 -,涵盖了玩家交替移动和同时移动的情况,它也被扩展到更复杂的游戏和存在不确定性的一般决策。
-
--Cross -Domain:中文表示--跨域。以小样本学习为例,跨域问题是指在学习过程中,源域(source -domain)和目标域(target -domain)在特征空间、类别空间或、边缘分布中的某一项或几项存在差异从而在学习过程中引起的问题。
-Domain Adaptation,缩写DA:中文表示--域适应,主要是针对Cross -Domain跨域问题中源域和目标域的特征空间、类别空间相同、但边缘分布不同,即Ps(xs) -/= -Pt(xt)情况下的解决途径,如下图所示;域适应更多的应用在无监督学习下即UDA---Unsupervised -Domain Adaptation。
-域适应,领域自适应技术的研究由来已久,其目的是将知识从一个或多个源域转移到具有不同数据分布的目标域。早期的方法通常依赖于浅层分类模型的适应性,使用实例重加权[12]和模型参数自适应[65]等技术。最近,人们提出了许多使用深层神经网络来解决域适应问题的方法,包括基于差异的方法,旨在调整域之间的边缘分布[38,54,23,30],基于对抗的方法,它们依赖于域鉴别器来鼓励与域无关的特征学习[59,14],以及基于重构的技术,通常使用编码器-解码器模型或GANs来重建新域中的数据[4,69,22]。然而,所有这些方法都考虑到训练集和测试集具有相同的类的情况。一项工作考虑了这样一种情况:有些类可能不相交,但仍然需要类重叠才能成功对齐[50]。相比之下,我们研究了源域和目标域具有完全不相交的标签集的跨域少镜头学习问题。
-域泛化DG与域适应相关,因为我们关心的是目标域的性能,而不是源域的性能;但是它考虑的是目标域样本在训练过程中不可用的情况,因此模型必须直接泛化而不是适应目标域。DG与传统的泛化有关:在一组训练实例中学习的模型可以归纳为新的测试实例,例如通过正则化。然而它在更高的层次上运行,我们的目标是帮助在一组训练域上训练的模型泛化为一个新的测试域。
-
CrossDomain、DomainAdaptation、DomainGeneralization -- 知乎
--- -不同的domain之间存在特征交集,比如电商领域的CTR(曝光给用户预测其点击的概率)任务存在着部分相同的用户群体和商品,这部分信息其实在不同的domain任务中可以共享,但是又不完全相同,比如同一用户在不同的domain中的行为是不一样的。所以简单的混合不同domain数据训练一个共享model(完全不区分domain任务)是不够的,必须要有区分。
-容易想到的就是每个domain训练一个model,但是这样显而易见的缺点就是(1)有的domain训练数据量少,导致很难学到一个理想效果(2)训练这么多model,维护起来也很麻烦,而且需要更多的计算和存储资源。
-总体来说就是既要融合但是也要有区分。所以本文介绍的阿里这篇论文的着眼点就是去学一个模型,同时其又可以区分不同domain任务。目前其已经被应用在了阿里的广告系统,CTR提高了8%,RPM收入提高了6%。所以还是非常不错的一篇工业实践,一起来看看吧。
-
++模式识别是对数据中的模式和规律性的自动识别。它在统计数据分析、信号处理、图像分析、信息检索、生物信息学、数据压缩、计算机图形学和机器学习中都有应用。模式识别起源于统计学和工程学;一些现代的模式识别方法包括使用机器学习,这是由于大数据可用性的增加和处理能力的新丰富. +这些活动可以看作是同一个应用领域的两个方面,在过去的几十年里都得到了长足的发展。
+
Pattern +recognition - Wikipedia
+L1 +and L2 Regularization Methods. Machine Learning | by Anuja Nagpal | +Towards Data Science
+++GAN是一个有趣的想法,最初被引入2014 +年,由 Ian Goodfellow(现供职于 +OpenAI)领导的蒙特利尔大学的一组研究人员。GAN +背后的主要思想是拥有两个相互竞争的神经网络模型。一个将噪声作为输入并生成样本(因此称为生成器)。另一个模型(称为鉴别器)从生成器和训练数据中接收样本,并且必须能够区分这两个来源。这两个网络玩一个连续的游戏,其中生成器正在学习生成越来越多的真实样本,而鉴别器正在学习越来越好地将生成的数据与真实数据区分开来。这两个网络是同时训练的,希望通过竞争来驱动生成的样本与真实数据无法区分。
+ +这里经常使用的类比是,生成器就像试图制造一些伪造材料的伪造者,而鉴别器就像试图检测伪造物品的警察。这种设置似乎也让人想起强化学习,其中生成器从鉴别器接收奖励信号,让它知道生成的数据是否准确。然而,与 +GAN +的主要区别在于我们可以将梯度信息从鉴别器反向传播回生成器网络,因此生成器知道如何调整其参数以产生可以欺骗鉴别器的输出数据。
+
An +introduction to Generative Adversarial Networks (with code in +TensorFlow)
+++ +minmax(有时称为Minimax、MM +[1]或鞍点[2])是人工智能、决策论、博弈论、统计学和哲学中用于最小化最坏情况(最大损失)场景的可能损失的决策规则. +在处理增益时,它被称为“maximin”——最大化最小增益。最初是为多人零和博弈论制定的 +,涵盖了玩家交替移动和同时移动的情况,它也被扩展到更复杂的游戏和存在不确定性的一般决策。
+
++Cross +Domain:中文表示--跨域。以小样本学习为例,跨域问题是指在学习过程中,源域(source +domain)和目标域(target +domain)在特征空间、类别空间或、边缘分布中的某一项或几项存在差异从而在学习过程中引起的问题。
+Domain Adaptation,缩写DA:中文表示--域适应,主要是针对Cross +Domain跨域问题中源域和目标域的特征空间、类别空间相同、但边缘分布不同,即Ps(xs) +/= +Pt(xt)情况下的解决途径,如下图所示;域适应更多的应用在无监督学习下即UDA---Unsupervised +Domain Adaptation。
+域适应,领域自适应技术的研究由来已久,其目的是将知识从一个或多个源域转移到具有不同数据分布的目标域。早期的方法通常依赖于浅层分类模型的适应性,使用实例重加权[12]和模型参数自适应[65]等技术。最近,人们提出了许多使用深层神经网络来解决域适应问题的方法,包括基于差异的方法,旨在调整域之间的边缘分布[38,54,23,30],基于对抗的方法,它们依赖于域鉴别器来鼓励与域无关的特征学习[59,14],以及基于重构的技术,通常使用编码器-解码器模型或GANs来重建新域中的数据[4,69,22]。然而,所有这些方法都考虑到训练集和测试集具有相同的类的情况。一项工作考虑了这样一种情况:有些类可能不相交,但仍然需要类重叠才能成功对齐[50]。相比之下,我们研究了源域和目标域具有完全不相交的标签集的跨域少镜头学习问题。
+域泛化DG与域适应相关,因为我们关心的是目标域的性能,而不是源域的性能;但是它考虑的是目标域样本在训练过程中不可用的情况,因此模型必须直接泛化而不是适应目标域。DG与传统的泛化有关:在一组训练实例中学习的模型可以归纳为新的测试实例,例如通过正则化。然而它在更高的层次上运行,我们的目标是帮助在一组训练域上训练的模型泛化为一个新的测试域。
+
CrossDomain、DomainAdaptation、DomainGeneralization +- 知乎
+++ +不同的domain之间存在特征交集,比如电商领域的CTR(曝光给用户预测其点击的概率)任务存在着部分相同的用户群体和商品,这部分信息其实在不同的domain任务中可以共享,但是又不完全相同,比如同一用户在不同的domain中的行为是不一样的。所以简单的混合不同domain数据训练一个共享model(完全不区分domain任务)是不够的,必须要有区分。
+容易想到的就是每个domain训练一个model,但是这样显而易见的缺点就是(1)有的domain训练数据量少,导致很难学到一个理想效果(2)训练这么多model,维护起来也很麻烦,而且需要更多的计算和存储资源。
+总体来说就是既要融合但是也要有区分。所以本文介绍的阿里这篇论文的着眼点就是去学一个模型,同时其又可以区分不同domain任务。目前其已经被应用在了阿里的广告系统,CTR提高了8%,RPM收入提高了6%。所以还是非常不错的一篇工业实践,一起来看看吧。
+
Pointer point the constant:
+const char *name = "chen" //statement a pointer point a constant |
because using const
,so the Pointer can't change variable
+in the address which it point ,so the statement as follows is incorrect
+:
name[3]='a' //incorrect,pointer "name" can't change constant |
but name is a normal pointer ,so it could change the items it +point,statement as follows are correct:
+name = 'zhang' //change the address the pointer point ,correct |
Also,Even you have changed your string you point ,you still can't +change the string, Please somebody tell me why ,Thank you !
+name[3]='y' //incorrect,but I don't know why! |
Constant Pointer
+A pointer can't change the address it point ,but it still can change +the content it point,example:
+char *const name ="chen"; //define a constant pointer |
Constant Pointer points to constant
+A constant pointer points a constant ,the address pointer point is +unchangeable and the content of address is unchangeable,example :
+const char *const name="chen"; //define a constant pointer point the constant |
Const
+Using a const to define a integer
variable ,the keyword
+omitted is acceptable the definition as following is same:
const int LIMITS = 100; |
formal parameters also can be describe by const
,for
+example:
int MAX(const int*ptr) |
the method promise the array can't be changed ,only be read.
|
in fact , you see the definition of Pointer array ,It is like as +follows:
+char *arr[3]={'abc','def','ghi'}; |
char *pChar1 = 'abc',*pChar2 = 'def',*pChar3='ghi' |
At the same time :
+arr[0] = pChar; //the arr first element is the pointer pChar |
and the pChar
is pointing the 'abc''s first element 'a',
+so we can use the code to print 'a'
printf("%c",pChar[0]); //print 'a' |
int fun(int x,int y); //normal function return integers |
This function declaration is normal ,but There are some difference in +next function declaration
+int *fun(int x,int y) |
This function declaration is pointer function ,the return is a
+pointer to int
,This is an address
To state a pointer to function ,which is a Pointer pointing function +.declaration form:
+int (*fun)(int x,int y) |
There are two ways to assign values to pointer variables
+fun = &function; |
There are also two ways to call pointer to function
+x=(*fun)(); |
Example:
+
|
operation new
can get a space from heap and return the
+pointer to point the first address of the memory,and delete
+can free the space
int *p; |
new
assign space for multidimensional array:
int i = 3; |
new
assign space with initial value:
|
connect(信号发送者,发送的信号(函数的地址),信号接受者,处理的槽函数(函数的地址)); |
松散耦合:发送端和接受端的松散耦合
-signals
中,返回值是voidpublic slots
文件中,返回值是voidclass.h |
signals: |
定义槽和信号后,需要定义触发函数
-weidget: |
要先定义connect
再调用classover
。
信号函数和槽函数直接重载时,会因为二义性而导致程序无法编译,于是我们需要用函数指针来代替直接给地址,方法如下:
-void(Teacher:: *teachersignal)(QString)=&Teacher::hungry; |
Qstring 转char *
-Qstring.toUtf8().data() //先转utf8,再转char* |
connect(btn,&QPushButton::clicked,zt,teachersignal2); |
直接将两个信号用connect相连
-断开信号 disconnect
多个信号一个槽
多个槽连接一个信号
信号和槽的参数类型必须一一对应,信号参数个数可以大于槽函数的参数个数
lambda函数
-//connect 一般使用方法 |
&
.connect(ui->actionnew,&QAction::triggered,[=](){ |
[=](){QDialog dig2(this); |
connect(信号发送者,发送的信号(函数的地址),信号接受者,处理的槽函数(函数的地址)); |
松散耦合:发送端和接受端的松散耦合
+Pointer point the constant:
-const char *name = "chen" //statement a pointer point a constant |
because using const
,so the Pointer can't change variable
-in the address which it point ,so the statement as follows is incorrect
-:
name[3]='a' //incorrect,pointer "name" can't change constant |
but name is a normal pointer ,so it could change the items it -point,statement as follows are correct:
-name = 'zhang' //change the address the pointer point ,correct |
Also,Even you have changed your string you point ,you still can't -change the string, Please somebody tell me why ,Thank you !
-name[3]='y' //incorrect,but I don't know why! |
Constant Pointer
-A pointer can't change the address it point ,but it still can change -the content it point,example:
-char *const name ="chen"; //define a constant pointer |
Constant Pointer points to constant
-A constant pointer points a constant ,the address pointer point is -unchangeable and the content of address is unchangeable,example :
-const char *const name="chen"; //define a constant pointer point the constant |
Const
-Using a const to define a integer
variable ,the keyword
-omitted is acceptable the definition as following is same:
const int LIMITS = 100; |
formal parameters also can be describe by const
,for
-example:
int MAX(const int*ptr) |
the method promise the array can't be changed ,only be read.
signals
中,返回值是voidpublic slots
文件中,返回值是voidclass.h |
signals: |
定义槽和信号后,需要定义触发函数
+weidget: |
要先定义connect
再调用classover
。
信号函数和槽函数直接重载时,会因为二义性而导致程序无法编译,于是我们需要用函数指针来代替直接给地址,方法如下:
+void(Teacher:: *teachersignal)(QString)=&Teacher::hungry; |
Qstring 转char *
+Qstring.toUtf8().data() //先转utf8,再转char* |
connect(btn,&QPushButton::clicked,zt,teachersignal2); |
直接将两个信号用connect相连
+断开信号 disconnect
多个信号一个槽
多个槽连接一个信号
信号和槽的参数类型必须一一对应,信号参数个数可以大于槽函数的参数个数
lambda函数
+//connect 一般使用方法 |
&
.connect(ui->actionnew,&QAction::triggered,[=](){ |
[=](){QDialog dig2(this); |
|
in fact , you see the definition of Pointer array ,It is like as -follows:
-char *arr[3]={'abc','def','ghi'}; |
char *pChar1 = 'abc',*pChar2 = 'def',*pChar3='ghi' |
At the same time :
-arr[0] = pChar; //the arr first element is the pointer pChar |
and the pChar
is pointing the 'abc''s first element 'a',
-so we can use the code to print 'a'
printf("%c",pChar[0]); //print 'a' |
int fun(int x,int y); //normal function return integers |
This function declaration is normal ,but There are some difference in -next function declaration
-int *fun(int x,int y) |
This function declaration is pointer function ,the return is a
-pointer to int
,This is an address
To state a pointer to function ,which is a Pointer pointing function -.declaration form:
-int (*fun)(int x,int y) |
There are two ways to assign values to pointer variables
-fun = &function; |
There are also two ways to call pointer to function
-x=(*fun)(); |
Example:
-
|
operation new
can get a space from heap and return the
-pointer to point the first address of the memory,and delete
-can free the space
int *p; |
new
assign space for multidimensional array:
int i = 3; |
new
assign space with initial value:
|
DSP相关讨论
+ +set(gca,'color','none'); |
set(0,'defaultfigurecolor','w') |
% 画一下sinc函数随着参数变化时的图像变化 |
set(get(gca, 'Title'), 'String','$x_1(k)$', 'interpreter','latex','Fontsize',18); |
figure('units','normalized','position',[0.1,0.1,0.7,0.6]) |
+]]>DSP相关讨论
- -set(gca,'color','none'); |
set(0,'defaultfigurecolor','w') |
% 画一下sinc函数随着参数变化时的图像变化 |
set(get(gca, 'Title'), 'String','$x_1(k)$', 'interpreter','latex','Fontsize',18); |
figure('units','normalized','position',[0.1,0.1,0.7,0.6]) |
-]]>CNN可视化:CNN -Explainer
-非常感谢那段时光大家的努力,我们的努力终究也会得到回报😊
+CNN可视化:CNN +Explainer
+非常感谢那段时光大家的努力,我们的努力终究也会得到回报😊
+]]>