From eb008ca3a5e69bd4be105e0cf3fba2d06c2cc784 Mon Sep 17 00:00:00 2001 From: ninglang Date: Sun, 12 May 2024 12:17:04 +0800 Subject: [PATCH] Site updated: 2024-05-12 12:17:03 --- search.xml | 826 ++++++++++++++++++++++++++--------------------------- 1 file changed, 413 insertions(+), 413 deletions(-) diff --git a/search.xml b/search.xml index a4978c8e1..cf4583ce8 100644 --- a/search.xml +++ b/search.xml @@ -97,6 +97,80 @@ href="">ipforbidden模块,刷入,即可 Android + + C&&C++问题总汇(1) + /2021/09/20/C&&C++%E9%97%AE%E9%A2%98%E6%80%BB%E6%B1%87(1)/ + C&&C++问题总汇🙄

+ +

二维数组

+

定义一个二维数组如下:

+
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);
Output: 16
+

那么访问这个二维数组的指针方法是:

+
a[i][j]=*(*(p+i)+j);
+

当然,下面这种方式也对(和一维数组的指针一样)

+
a[i][j]=p[i][j];
+

Y7D20b8621AY6CYryYagUED1

+
    +
  • 指针数组是这样子的吗?
  • +
+
char *strs[3] ={"chinese","zhonguo" } ;//3代表两个string元素,一个'\0'
+

这里使用的就是指针数组,所以这里是3(数组中元素的个数+1),而上面的那个是4数组个每个元素的下一级个数。

+

二维数组赋值的问题

+
    +
  • 二维数组有两个维度,当然可以按照一个一个去赋值,但那样毕竟太慢,所以有没有更好的赋值方法呢?
  • +
+
int q[4];
for(int i = 0;i<4;i++){

cin>>q[i];
}
int b1[][2]={{q[0],q[1]},{q[3],q[4]}};
+

这是我现在使用的方法,并不是十分的好,希望有所改进

+
    +
  • 友元函数访问私有成员问题
  • +
+
//习题5-18

//报错,a[2][2]是私有成员,不可在operator中访问
#include<iostream>
using namespace std;
class List{
public:
List(int i,int j,int k ,int m){
a[0][0]=i,a[0][1]=j,a[1][0]=k,a[1][1]=m;
}
List(int (*p)[2]){
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
a[i][j]=p[i][j];
}
}
}
List(){
}
friend operator+(List &a,List &b);
friend operator-(List &a,List &b);
void disp(){
cout<<a[0][0]<<" "<<a[0][1]<<endl;
cout<<a[1][0]<<" "<<a[1][1]<<endl;

}
private:
int a[2][2];
};
List operator+(List a,List b){
int c[2][2];
for(int i=0;i<2; i++){
for(int j=0;j<2;j++){
c[i][j]=a.a[i][j]+b.a[i][j];
}
}
return List(c);
}
List operator-(List &a,List &b){
int c[2][2];
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
c[i][j]=a.a[i][j]-b.a[i][j];
}
}
return List(c);
}
int main(){
List a(1,2,3,4);

int q[4];
for(int i = 0;i<4;i++){

cin>>q[i];
}
int b1[][2]={{q[0],q[1]},{q[3],q[4]}};
List b(b1);
List c;
c = a+b;
c.disp();
return 0;
}
+

指针的指针

+
int **p;
//使用方法
int **p; //定义一个指针的指针
int *q; //定义一个int型的指针
int a[3]={1,2,3};
q = a; //q指向a
p =&q; //p指向q
printf("%d",*(*p+1)); //所以*p展现了q,*(*p)为q展现自己储存的地址的内容
return 0;
+
    +
  • 所以说,这个int有用吗?
  • +
+
*((int *)a+n*i+j);  
+
    +
  • 函数的分号问题
  • +
+
T sum(){
.....
}

T sum(){
.....
}; //这个分号是否有必要?
+
    +
  • 答:
  • +
+
//为什么Base和Derived的虚函数地址一样呢 
#include<iostream>
using namespace std;
class Base{
public:
virtual void func(){
};
virtual void func1(){
}
};
class Derived: public Base{
public:
virtual void fun(){
};
virtual void func1(){
};
};

int main(){
Derived d;
if (d.Base::_vptr==d._vptr){
cout<<"yes"<<endl; //显示yes
}
return 0;
}
+
    +
  • 问:Base中的虚函数和Derived的虚函数的地址为什么是一样的呢

  • +
  • 答:

  • +
+

虚表指针指向了一个虚表,虚表中存放着类中的虚函数。如果类中存在虚函数,那么构造对象的时候,就会生一个虚表指针指向虚表,虚表中存放虚函数。所以,要注意的一-点, +在类的构造函数中不要调用虚函数,这是一一个危险的动作,因为很可能它还未 +初始化完毕。

+
    +
  • 问:动态联编和静态联编,可以访问派生类函数
  • +
  • 答:
  • +
+
#include<iostream>
using namespace std;
class A{
public:
void print(){
cout<<"1,2,3";
}
};
class B:public A{
public:
void print1(){
cout<<"4,5,6";
}
};
int main(){
A *ptr;
B a1;
ptr =&a1;
ptr->print1(); //can't called
return 0;
}
+
    +
  • 问:不能调用派生类函数
  • +
  • 答:
  • +
+
#include<iostream>
using namespace std;
class Base{
public:
void func4(){
cout<<"nihao";
}
};
class Derived:public Base{
public:
void func4(){
cout<<" nihao!";
}
};
int main(){
Base d1, *bp;
Derived d2;
bp=&d2;
bp->func4(); //这里直接调用了Base里面的func4(),这个算重载吗?
}
+
    +
  • 问:这个可以算重载嘛?,结果值为第一个
  • +
  • 答:
  • +
+
#include<iostream>
using namespace std;
class Length{
int meter;
public:
Length(int m){
meter = m;
}
operator double(){
return (1*meter/1000); //这个地方一定要使用1.0,否者强制转化会导致结果出错
}
};
int main(){
Length a(1500);
double m =float(a);
cout<<"m="<<m<<"km"<<endl;
return 0;
}
+

注意:这里Length返回值只能是1.0,不能是1,否者将会不准确。

+]]>
+ + coding + +
C && C++ (1) /2021/09/03/C_C++/ @@ -226,80 +300,6 @@ transfer,but it seem that we have really passed a,b into the function "swap"

#include<iostream>
using namespace std;
int a[] = {1,3,5,6,7,3};
int &index(int);
int main(){
index(1)=100; //in fact ,because the return of funciton is not a number ,but a[i]
cout<<"a[1]="<<a[1]<<endl;
return 0;

}
int &index(int i){
return a[i];
}
-]]> - - coding - -
- - C&&C++问题总汇(1) - /2021/09/20/C&&C++%E9%97%AE%E9%A2%98%E6%80%BB%E6%B1%87(1)/ - C&&C++问题总汇🙄

- -

二维数组

-

定义一个二维数组如下:

-
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);
Output: 16
-

那么访问这个二维数组的指针方法是:

-
a[i][j]=*(*(p+i)+j);
-

当然,下面这种方式也对(和一维数组的指针一样)

-
a[i][j]=p[i][j];
-

Y7D20b8621AY6CYryYagUED1

-
    -
  • 指针数组是这样子的吗?
  • -
-
char *strs[3] ={"chinese","zhonguo" } ;//3代表两个string元素,一个'\0'
-

这里使用的就是指针数组,所以这里是3(数组中元素的个数+1),而上面的那个是4数组个每个元素的下一级个数。

-

二维数组赋值的问题

-
    -
  • 二维数组有两个维度,当然可以按照一个一个去赋值,但那样毕竟太慢,所以有没有更好的赋值方法呢?
  • -
-
int q[4];
for(int i = 0;i<4;i++){

cin>>q[i];
}
int b1[][2]={{q[0],q[1]},{q[3],q[4]}};
-

这是我现在使用的方法,并不是十分的好,希望有所改进

-
    -
  • 友元函数访问私有成员问题
  • -
-
//习题5-18

//报错,a[2][2]是私有成员,不可在operator中访问
#include<iostream>
using namespace std;
class List{
public:
List(int i,int j,int k ,int m){
a[0][0]=i,a[0][1]=j,a[1][0]=k,a[1][1]=m;
}
List(int (*p)[2]){
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
a[i][j]=p[i][j];
}
}
}
List(){
}
friend operator+(List &a,List &b);
friend operator-(List &a,List &b);
void disp(){
cout<<a[0][0]<<" "<<a[0][1]<<endl;
cout<<a[1][0]<<" "<<a[1][1]<<endl;

}
private:
int a[2][2];
};
List operator+(List a,List b){
int c[2][2];
for(int i=0;i<2; i++){
for(int j=0;j<2;j++){
c[i][j]=a.a[i][j]+b.a[i][j];
}
}
return List(c);
}
List operator-(List &a,List &b){
int c[2][2];
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
c[i][j]=a.a[i][j]-b.a[i][j];
}
}
return List(c);
}
int main(){
List a(1,2,3,4);

int q[4];
for(int i = 0;i<4;i++){

cin>>q[i];
}
int b1[][2]={{q[0],q[1]},{q[3],q[4]}};
List b(b1);
List c;
c = a+b;
c.disp();
return 0;
}
-

指针的指针

-
int **p;
//使用方法
int **p; //定义一个指针的指针
int *q; //定义一个int型的指针
int a[3]={1,2,3};
q = a; //q指向a
p =&q; //p指向q
printf("%d",*(*p+1)); //所以*p展现了q,*(*p)为q展现自己储存的地址的内容
return 0;
-
    -
  • 所以说,这个int有用吗?
  • -
-
*((int *)a+n*i+j);  
-
    -
  • 函数的分号问题
  • -
-
T sum(){
.....
}

T sum(){
.....
}; //这个分号是否有必要?
-
    -
  • 答:
  • -
-
//为什么Base和Derived的虚函数地址一样呢 
#include<iostream>
using namespace std;
class Base{
public:
virtual void func(){
};
virtual void func1(){
}
};
class Derived: public Base{
public:
virtual void fun(){
};
virtual void func1(){
};
};

int main(){
Derived d;
if (d.Base::_vptr==d._vptr){
cout<<"yes"<<endl; //显示yes
}
return 0;
}
-
    -
  • 问:Base中的虚函数和Derived的虚函数的地址为什么是一样的呢

  • -
  • 答:

  • -
-

虚表指针指向了一个虚表,虚表中存放着类中的虚函数。如果类中存在虚函数,那么构造对象的时候,就会生一个虚表指针指向虚表,虚表中存放虚函数。所以,要注意的一-点, -在类的构造函数中不要调用虚函数,这是一一个危险的动作,因为很可能它还未 -初始化完毕。

-
    -
  • 问:动态联编和静态联编,可以访问派生类函数
  • -
  • 答:
  • -
-
#include<iostream>
using namespace std;
class A{
public:
void print(){
cout<<"1,2,3";
}
};
class B:public A{
public:
void print1(){
cout<<"4,5,6";
}
};
int main(){
A *ptr;
B a1;
ptr =&a1;
ptr->print1(); //can't called
return 0;
}
-
    -
  • 问:不能调用派生类函数
  • -
  • 答:
  • -
-
#include<iostream>
using namespace std;
class Base{
public:
void func4(){
cout<<"nihao";
}
};
class Derived:public Base{
public:
void func4(){
cout<<" nihao!";
}
};
int main(){
Base d1, *bp;
Derived d2;
bp=&d2;
bp->func4(); //这里直接调用了Base里面的func4(),这个算重载吗?
}
-
    -
  • 问:这个可以算重载嘛?,结果值为第一个
  • -
  • 答:
  • -
-
#include<iostream>
using namespace std;
class Length{
int meter;
public:
Length(int m){
meter = m;
}
operator double(){
return (1*meter/1000); //这个地方一定要使用1.0,否者强制转化会导致结果出错
}
};
int main(){
Length a(1500);
double m =float(a);
cout<<"m="<<m<<"km"<<endl;
return 0;
}
-

注意:这里Length返回值只能是1.0,不能是1,否者将会不准确。

]]>
coding @@ -555,108 +555,6 @@ alt="TTL三态门" /> 电子
- - GANs - /2023/06/03/GANs/ - GANs

- -

模式识别的定义

-
-

模式识别是对数据中的模式和规律性的自动识别。它在统计数据分析信号处理图像分析信息检索生物信息学数据压缩计算机图形学机器学习中都有应用。模式识别起源于统计学和工程学;一些现代的模式识别方法包括使用机器学习,这是由于大数据可用性的增加和处理能力的新丰富. -这些活动可以看作是同一个应用领域的两个方面,在过去的几十年里都得到了长足的发展。

-
-

Pattern -recognition - Wikipedia

-

L1 和 L2 正则化方法

-

L1 -and L2 Regularization Methods. Machine Learning | by Anuja Nagpal | -Towards Data Science

-

GAN

-
-

GAN是一个有趣的想法,最初被引入2014 -年,由 Ian Goodfellow(现供职于 -OpenAI)领导的蒙特利尔大学的一组研究人员。GAN -背后的主要思想是拥有两个相互竞争的神经网络模型。一个将噪声作为输入并生成样本(因此称为生成器)。另一个模型(称为鉴别器)从生成器和训练数据中接收样本,并且必须能够区分这两个来源。这两个网络玩一个连续的游戏,其中生成器正在学习生成越来越多的真实样本,而鉴别器正在学习越来越好地将生成的数据与真实数据区分开来。这两个网络是同时训练的,希望通过竞争来驱动生成的样本与真实数据无法区分。

-

-

这里经常使用的类比是,生成器就像试图制造一些伪造材料的伪造者,而鉴别器就像试图检测伪造物品的警察。这种设置似乎也让人想起强化学习,其中生成器从鉴别器接收奖励信号,让它知道生成的数据是否准确。然而,与 -GAN -的主要区别在于我们可以将梯度信息从鉴别器反向传播回生成器网络,因此生成器知道如何调整其参数以产生可以欺骗鉴别器的输出数据。

-
-

An -introduction to Generative Adversarial Networks (with code in -TensorFlow)

-
-

minmax(有时称为MinimaxMM -[1]鞍点[2])是人工智能决策论博弈论统计学哲学中用于最小化最坏情况最大损失)场景的可能损失的决策规则. -在处理增益时,它被称为“maximin”——最大化最小增益。最初是为多人零和博弈论制定的 -,涵盖了玩家交替移动和同时移动的情况,它也被扩展到更复杂的游戏和存在不确定性的一般决策。

-
-

Minimax - -Wikipedia

-
    -
  • Cross-domain
  • -
-
-

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%。所以还是非常不错的一篇工业实践,一起来看看吧。

-
-

同任务但不同domain数据的统一模型

-

Transform

-

OpenAI -ChatGPT(一):十分钟读懂 Transformer - 知乎

-]]>
- - code - -
专业英语 /2023/06/05/English_profess/ @@ -775,9 +673,111 @@ alt="被删除视频" /> - LinkWe Technology - /2021/10/08/LinkWe/ - LinkWe Technology product

+ GANs + /2023/06/03/GANs/ + GANs

+ +

模式识别的定义

+
+

模式识别是对数据中的模式和规律性的自动识别。它在统计数据分析信号处理图像分析信息检索生物信息学数据压缩计算机图形学机器学习中都有应用。模式识别起源于统计学和工程学;一些现代的模式识别方法包括使用机器学习,这是由于大数据可用性的增加和处理能力的新丰富. +这些活动可以看作是同一个应用领域的两个方面,在过去的几十年里都得到了长足的发展。

+
+

Pattern +recognition - Wikipedia

+

L1 和 L2 正则化方法

+

L1 +and L2 Regularization Methods. Machine Learning | by Anuja Nagpal | +Towards Data Science

+

GAN

+
+

GAN是一个有趣的想法,最初被引入2014 +年,由 Ian Goodfellow(现供职于 +OpenAI)领导的蒙特利尔大学的一组研究人员。GAN +背后的主要思想是拥有两个相互竞争的神经网络模型。一个将噪声作为输入并生成样本(因此称为生成器)。另一个模型(称为鉴别器)从生成器和训练数据中接收样本,并且必须能够区分这两个来源。这两个网络玩一个连续的游戏,其中生成器正在学习生成越来越多的真实样本,而鉴别器正在学习越来越好地将生成的数据与真实数据区分开来。这两个网络是同时训练的,希望通过竞争来驱动生成的样本与真实数据无法区分。

+

+

这里经常使用的类比是,生成器就像试图制造一些伪造材料的伪造者,而鉴别器就像试图检测伪造物品的警察。这种设置似乎也让人想起强化学习,其中生成器从鉴别器接收奖励信号,让它知道生成的数据是否准确。然而,与 +GAN +的主要区别在于我们可以将梯度信息从鉴别器反向传播回生成器网络,因此生成器知道如何调整其参数以产生可以欺骗鉴别器的输出数据。

+
+

An +introduction to Generative Adversarial Networks (with code in +TensorFlow)

+
+

minmax(有时称为MinimaxMM +[1]鞍点[2])是人工智能决策论博弈论统计学哲学中用于最小化最坏情况最大损失)场景的可能损失的决策规则. +在处理增益时,它被称为“maximin”——最大化最小增益。最初是为多人零和博弈论制定的 +,涵盖了玩家交替移动和同时移动的情况,它也被扩展到更复杂的游戏和存在不确定性的一般决策。

+
+

Minimax - +Wikipedia

+
    +
  • Cross-domain
  • +
+
+

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%。所以还是非常不错的一篇工业实践,一起来看看吧。

+
+

同任务但不同domain数据的统一模型

+

Transform

+

OpenAI +ChatGPT(一):十分钟读懂 Transformer - 知乎

+]]>
+ + code + +
+ + LinkWe Technology + /2021/10/08/LinkWe/ + LinkWe Technology product