opencv-python
OpenCV-Python 框架
特别鸣谢:CodecWang 提供的cv教程 https://github.com/CodecWang/opencv-python-tutorial
读图
imread() 是基本读图函数,其有两个参数
filename:给出图片的绝对路径或者相对路径
flags:指定读取图像的方式,可以为 cv2.IMREAD_COLOR 彩色图 (1), cv2.IMREAD_GRAYSCALE 灰度图 (0), cv2.IMREAD_UNCHANGED 包含透明通道的彩色图 (-1)
imshow() 是显示读入图片,有两个参数
window_name:窗口的名称
img:上文读入图片的变量
窗口尺寸是自动给定的
waitKey() 是让窗口等待响应,0 是无限长等待,非零是等待该长度的 ms
imwrite() 两个参数
第一个是输出路径,包括对象名及其后缀
第二个是图片变量
cvtColor() 两个参数
frame:图片对象变量
tar_color:目标颜色,常见的有 灰度图 cv.COLOR_BGR2GRAY
...
loss_function
损失函数 Loss Function
L1 损失
就是火色特说的 ∣∣⋅∣∣1||\cdot||_1∣∣⋅∣∣1 损失,或者说是绝对值损失函数
L2 损失
就是色特说的 ∣∣⋅∣∣2||\cdot||_2∣∣⋅∣∣2 损失,或者说是平方损失函数
Hubert Loss:修正主义,将L1和L2进行结合
公式 HuberLoss={12(Yi−Yi′)2,∣Yi−Yi′∣≤αα(∣Yi−Yi′∣−12α),∣Yi−Yi′∣>αHuber Loss = \begin{cases}\frac 1 2(Y_i - Y'_i)^2,& |Y_i-Y_i'|\le\alpha\\\alpha(|Y_i - Y_i'|-\frac 1 2\alpha), &|Y_i - Y_i'|>\alpha\end{cases}HuberLoss={21(Yi−Yi′)2,α(∣Yi−Yi′∣−21α),∣Yi−Yi′∣≤α∣Yi−Yi′∣>α 曲线介于两者之间,在差小的时候损失较小,差大的 ...
dqn
强化学习网络 DQN
目的:让机器学会打游戏
在每一个对局中,情景各不相同,所以我们需要让机器当场学习
应用:Alpha Go; 王者荣耀 ai
特点
没有监督数据,只有奖励 (reward) 信号
例如围棋,可能性太多,一般不会通过已知情况进行计算
奖励信号不一定是实时的,可能存在延迟
不同于贪心算法,我们可能要放弃局部胜利而获得最终胜利
时间是一个重要因素
意思是样本之间存在时间维系的强关系
智能体 (Agent) 但前的动作 (Action) 影响后续接收到的数据
要素
奖励: RtR_tRt 是一个反馈信号,是一个标量
工作目标是:最大化累积奖励
基于奖励假设:所有问题的目标都可以被描述为最大化期望的累积奖励
期望表示平均水平高,用于避免“赌博”的训练结果,也就是要求在稳定高水平下找更好的
序列决策 Sequential Decision Making
目标:选择一定的动作序列以最大化未来的总体奖励(是一系列)
因此奖励反馈是延迟的
智能体 Agent
输入: 观 ...
cnn
卷积神经网络 CNN
应用:图像识别
处理一张图片的时候我们首先要看这张图片具有哪些特征点,如果图片是人,那么特征可能就是眼睛鼻子
特征 (feature) 应该是本类具有的,其他类不具有的;其次,我们也要和本类中其他特别的样本进行比较
过滤器 Filter/ 补丁 Patch / 卷积核 Convolution Kernel
找到图像的某些特征之后,我们找其周围的一块像素点出来,将此设置为一个 filter 或者 patch
从原图之中取出来进行卷积运算
卷积运算思路
在原图 m×mm\times mm×m 的像素矩阵中,我们有过滤器 n×nn\times nn×n,则卷积就是从原矩阵中抽出 n×nn\times nn×n 的尺寸的矩阵和过滤器做对应相乘相加求和就是结果了
平移过滤器使其遍历原图即可获得特征谱 (feature map)
由此我们也可以看出不同的 filter 矩阵对应的功能也不同
事实上我们只需要指定卷积核的个数和尺寸就可以了,不需要具体指定卷积核的特征
卷积神经网络
维度变化
![[convolution_concept.png]]
如图,在相邻的 ...
ann
神经网络 ANN
代码定义
首先我们继承自 torch.nn.Module
我们定义每一层 Hide 都会用到 self.layer = nn.Linear(input_dim,output_dim)
正向传播 Forward Propagation
需要传入一个 torch.tensor 变量 x,然后使用 x = torch.sigmoid(self.layer1(x))
当然可以使用其它激活函数代替 sigmoid()
损失函数 Loss Function
常见的有 nn.MSELoss() 等
优化函数 Optim
采用 torch.optim 库的 SGD(随机梯度下降)
SGD 参数是学习参数 model.parameters(), 和学习率 learning_rate=0.1
前者需要定义好 model 的层数
反向传播 Backward Propagation
总共分三步:清零梯度,计算本层梯度,执行
optimizer.zero_grad() -> loss.backward() -> optimizer.step() ...
activation_function
激活函数 Activation Function
定义
在神经元中,输入的input经过一系列加权求和后作用于另一个函数,这个函数就是这里的激活函数
为什么要AF?
如果没有非线性AF,我们的输出结果和输入结果就会保持线性关系
Sigmoid 函数
σ(x)=11+e−x\sigma(x) = \frac{1}{1+e^{-x}}σ(x)=1+e−x1
图形如下
适用情形:
输出值限定在 0 到1
导数范围 (0,0.25](0,0.25](0,0.25], 也就是说在多层神经网络的情况下通过链式法则反向传播向前求导,最前面几层对最终结果会乘上层数个 不大于 0.250.250.25 的数,也就是说没啥影响了,因此层数不能过大
指数函数算力消耗较大
SoftMax 函数
S(x)=eziΣcezcS(x) = \frac{e^{z_i}}{\Sigma_c e^{z_c }}S(x)=Σcezcezi
可以将一个多分类的问题转换成各类别的概率分布问题
但是由于是指数,可能会出现数值爆炸的问题太大了效果不明显(最大的接近于 ...
square_integrable_function_space
8. 平方可积函数空间 Space of Square Integrable Function
函数线性空间定义
如何定义一个函数?
最好的答案是用一个级数去收敛,对于一个任意有界函数, v=limN→∞Σn=0Nλnunv = \lim _{N\to \infty}\Sigma_{n=0}^N\lambda_n u_nv=limN→∞Σn=0Nλnun
定义收敛,那么就要定义 norm
也就是我们要有 ∣∣v−Σn=0∞λnun∣∣→0||v -\Sigma_{n=0}^\infty \lambda_n u_n || \to 0∣∣v−Σn=0∞λnun∣∣→0
函数的 norm 通过内积定义 ⟨f,f⟩=∣∣f∣∣\langle f,f\rangle = ||f||⟨f,f⟩=∣∣f∣∣
现在的证明问题已经变成了 ⟨f,f⟩=0\lang f,f\rang=0⟨f,f⟩=0 如何推导出 f=0f=0f=0 呢
但是内积的定义 ⟨f,g⟩=∫abfˉgdx,f,g∈C([a,b])\lang f,g\rang = \int_a^b \b ...
separatable_pde
11. 可分离的偏微分方程 PDE
受张力的绳 suspended chain
首先位移函数是一个双变量函数 u(x,t)u(x,t)u(x,t)
考虑二维平面,具有时间属性
我们假定 utu_tut 表示对 ttt 求导结果,同理 uttu_{tt}utt 表示对时间求二阶导的结果
微分方程等式 utt=c2⋅uxxu_{tt} = c^2\cdot u_{xx}utt=c2⋅uxx, c2=Ftenρc^2 = \frac{F_{ten}}{\rho}c2=ρFten
FtenF_{ten}Ften 表示的是绳子内部的张力,假设绳子静止 (time-independent)且绳子重力效果不大
ρ\rhoρ 表示绳子密度
为了细化公式,定义 Fgen=ρgxF_{gen} = \rho gxFgen=ρgx
由于绳子的两端固定,这就是经典的 BVP 边界问题
分离思路
u(x,t)=X(x)⋅T(t)u(x,t) = X(x)\cdot T(t)u(x,t)=X(x)⋅T(t) 来获得两个单变量方程的积
我们要证明这个分离是 ...
power_series_sln2ode
7. 级数法求解微分方程 Power Series Solutions
二阶变系数齐次 ODE 的通式 Px′′+Qx′+Rx=0Px''+Qx'+Rx = 0Px′′+Qx′+Rx=0
首先通过令P≠0P \not = 0P=0 同时除以 PPP 得到 x′′+px′+qx=0x'' + px' +qx = 0x′′+px′+qx=0
级数收敛定理
对于函数 p,q 通过级数展开,拥有收敛半径 ρ1,ρ2\rho _1, \rho_2ρ1,ρ2,则解集 xxx 也拥有大于等于 min(ρ1,ρ2)\min(\rho_1,\rho_2)min(ρ1,ρ2) 的级数展开
也就是说,取两个收敛的min以内的部分的 t 一定满足收敛,即可以展开
或者说,通过级数收敛得到的答案大概在 (−ρmin,+ρmin)(-\rho_{min}, +\rho_{min})(−ρmin,+ρmin) 区间上是可以展开的,外部就会 →∞\to \infty→∞
这里说的是至少,也就是说并不是在 ρmin ...
ode_boundary_case
10. ODE 的边界问题
Sturm-Liouville 问题
L:=−1r(x)(ddx(p(x)ddx)+q(x))L:=-\frac{1}{r(x)}(\frac{d}{dx}(p(x)\frac{d}{dx})+q(x))L:=−r(x)1(dxd(p(x)dxd)+q(x))
在平方可积函数空间里面,可以使用线性算符进行特征值计算 Lu=λuLu =\lambda uLu=λu
常用形式 L=a2d2dx2+a1ddx+a0L =a_2 \frac{d^2}{dx^2} + a_1 \frac{d}{dx} + a_0L=a2dx2d2+a1dxd+a0
结论 p=e∫a1a2p = e^{\int\frac{a_1}{a_2}}p=e∫a2a1, r=−pa2r = -\frac{p}{a_2}r=−a2p, q=−a0rq = -a_0rq=−a0r
也就是说 SL 方程适合用来解决二阶线性方程
regular 的条件
III 是一个有限区间
p,p′,q,rp,p',q,rp,p′,q,r 连续
...
