How Dose PyTorch Reshape Works
The dimension change rule is same in Numpy and PyTorch.
The main dimension change method is broadcast and reshape
Broadcast
Broadcasting is a powerful mechanism in NumPy and PyTorch that enables arithmetic operations on arrays of different shapes. It does this by “stretching” the smaller array across the larger array so the dimensions match.
NumPy Broadcasting Rules:
Matching Dimensions: If two arrays differ in their number of dimensions, the shape of the one with fewer dimensions is pa ...
PyTorch nn.Transformer 用法笔记
本文项目链接: Transformer chatbot
nn.Transformer 结构:
抽象层1: nn.Transformer (不常用,不是特别灵活)
抽象层2: nn.TransformerEncoder, nn.TransformerDecoder (常用,比较灵活)
抽象层3: nn.TransformerEncoderLayer, nn.TransformerDecoderLayer (常用于自定义架构, 非常灵活)
这里直接忽略 nn.Transformer 的使用方法,只讲解第2, 3层
单层 transformer
nn.TransformerEncoderLayer 参数和期望输入输出维度
输入输出维度一致: pyTorch保证每个Layer的输入输出维度都是一致的,其实也很好理解:
如果不看LayerNorm层的话, TransformerEncoderLayer只有 attention layer 和 FNN两个组成
attention layer输入输出维度是一定是一样的,这个可以证明 (输入 d_model 维度向量,输出 d_mode ...
verilog学习笔记
module
module是verilog中的基础封装,表示设计的一个模块
module的参数表定义了input 和 output
12345678910module Test ( input in, // input 关键字表示他是input的接口 output out, // output同理);/* 这里是线路连接和逻辑处理的地方 */endmodule
assign
verilog中所有线路都是单向的,通过assign语句连接
12345678910module Test ( input in, // input 关键字表示他是input的接口 output out, // output同理); /* 这里是线路连接和逻辑处理的地方 */ assign out = in; // 表示构建一个单向线路 in -> outendmodule
注意,这里的 = 是描述硬件的链接的,和传统语言中的赋值不一样,他是永久有效的,表示一个单向连接线!
所以同一个连接方法,不同的assign顺序不一样的!
12345678 ...
SQL 学习
SQL基础
SQL 的 domain type (数据类型)
char(n): 固定长度的char string (长度为n)
varchar(n): 可变长度的char string(长度最大为n)
int: int32
smallint: int16
numeric(p, d): 固定小数点数, 其意义为该小数长为 p,其中小数部分长度固定位 d。 eg: numeric(3, 1) 可以表示 44.5, 但是不能表示 1.32, 444.5 这种数
real: float32
double precision: float64
创建table
基础创建语法
12345678910/**多行注释方法 * 注意,我们现在是直接创建了 relation instance 而不是 relation schema * 再重申一次,一个实例 r(R) 中, r是实例名称, R 是 schema 名称 !!!!! */create table r ( --这是单行注释,这里我们创建了一个 r instance (或者叫table)ID char(5),name varchar(20), ...
C++ 继承与多态原理
C++ 继承与多态
虚函数和非虚函数都支持继承和重写,唯一的区别在于动态绑定/静态绑定,然后实现方面也有区别罢了
0. 继承与切片
在子类对象本身(不是指针!!!)被强制类型类型转换为父类对象时,所有子类独有的东西都会被drop掉!!!!!
同时这个对象指向虚函数表的指针会改为指向父类的虚函数表!!!
eg:
123B b(1, 2);A a = b; //此时a的虚函数表是父类的表,不是子类 B 的!!!
注:那怎样才能安全呢?这里基类如果是多态类型,可以使用RTTI(Run-Time Type Information)的dynamic_cast 来进行识别后进行安全转换(以后详谈).
I. 父类指针与子类指针
1.为了实现多态,C++ 中父类指针指向子类对象是自动转换的!!
2.但是子类指针指向父类对象可以强制类型转换(但是非常不安全,万一访问了父类虚函数表中没有的东西会报错)
3.指针类型本质上只会限制访问虚函数表,而且是编译器限制,技术上是完全可以访问的
比如以下例子:一个父类指针A* pa指向一个子类对象b, 那么除非刻意绕 ...
傅里叶变换与傅里叶级数的推导
傅里叶级数与傅里叶变换的推导
这篇文章对于傅里叶级数,变换的意义不做过多研究,网络上有非常多图文并茂的定性解释的资料,请自行研究
本文聚焦于几个基本的命题与证明来加深对傅里叶级数与傅里叶变换的理解
1. 傅里叶级数与函数内积
对于傅里叶级数,最重要的命题,也是这个级数能存在的基础就是任意三角函数sin(nx)与cos(nx)sin(nx)与cos(nx)sin(nx)与cos(nx)之间是正交的
首先定义函数内积
都知道向量是有内积定义的,即:
对向量u,v,内积的定义为:对向量\mathbf{u}, \mathbf{v}, 内积的定义为:
对向量u,v,内积的定义为:
<u,v>=uTv<\mathbf{u}, \mathbf{v}> = \mathbf{u}^T\mathbf{v}
<u,v>=uTv
所以函数内积的核心在于将一个函数当作一个向量处理
为什么这样做是合理的?
因为我们关注的是函数之间的线性组合能否张成一个空间来表示大部分函数,eg: acosx+bsinxacosx + bsinxacosx+bs ...
使用最大期望(EM)算法与贝叶斯定理解决GMM问题
Expectation-Maximization Algorithm (EM) 算法与贝叶斯定理
注1: 本文仅基于GMM高斯混合模型的EM算法解法来讨论
注2: 本文不会涉及证明EM算法对于期望似然函数 (ELF) 的 weak monotonic increase 性质,但这个证明是这个算法可行的基础,请自行证明
问题引入:
我们现在有两个已知服从正态分布的数据集混在一起了(比如最经典的,两个班级的成绩数据混在一起了),我们要给出一个合理的预测每个成绩更可能是那个班的
我们首先创建两个基于正太分布的数据集,我们现在假设班级1有60个人,班级2有40个人(这个数据后面有用)。
接下来我会生成一组数据,并在数轴上展示:
班级 1 的真实参数: num1,μ1,σ1=50,80,5num_1, \mu_1, \sigma_1 = 50, 80, 5num1,μ1,σ1=50,80,5
班级 2 的真实参数: num2,μ2,σ2=40,50,10num_2, \mu_2, \sigma_2 = 40, 50, 10num2,μ2,σ2=40,50,10
...
理解信息熵的定义
信息熵
首先,定义:描述信息源的 “不确定性”
这个 “不确定性” 是怎么用数学量化的呢?我们常常用一个叫做信息量的量来量化。
如何定义 “信息量”:
前排提醒:这个 “信息量” 和常见的 “含有信息的多少” 有所不同
首先看以下情景:
情形:我现在有两个room,两个room之间只有一个可以传输 0, 1 电位信号(bit)的电线连接
任务:现在我在在其中一个room中执行伯努利实验, 现在需要把结果传输给另一个room, 现在问题是: 我们需要几个 bit 才能表示一个事件?
情形:
eg1:对于抛硬币这个实验来说, 1个bit就行了
eg2 = 对于一个转盘(八种可能)需要3个bit
所以我们可以总结: 我们可以用 nnn 个比特来表示最大 2n2^n2n 个元素
换句话来说:如果我们需要表示 mmm 个元素, 我们需要最少 log2mlog_2mlog2m 个bit!!!
这就是 “信息量” 的定义方式
“信息量” 的定义:
信息量就是为了传输所有可能的信息需要bit的数量
定义扩展:
1. 从伯努利实验出发
但是我们 ...
Coursera 机器学习课程2023版笔记(第一部分)
Coursera 机器学习课程2023版笔记(第一部分)
这本笔记的主题:
线性回归
本文所用的数据来源于CUHK(SZ) MAT2041 22 fall hw05 的第一题,前两个值(x_tain,y_train)是输入,最后一个值(z_train)是输出
第一部分:初始设置
12345import numpy as npimport matplotlib.pyplot as pltx_train = np.array([7.0,18.0,3.0])y_train = np.array([10.0,3.0,10.0])z_train = np.array([30.0,40.0,20.0])
这几个点在图上表示为:
1234fig = plt.figure()ax = fig.add_subplot(projection='3d')ax.scatter(x_train, y_train, z_train, marker="x", c='r') plt.show()
第二部分:线性回归模型
这个使用的是z = w1x1+w ...
CSC1002笔记
这篇文章是 CUHK(SZ) CSC1002 23 spring课程assignment的代码 环境:(python 3.10以上)
assignment 1 (得分:93/100):
这是数字华容道,分"9与16两个版本"
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116 ...