边缘检测
边缘一般来说,边缘是图像像素变化大的区域,但是这并不绝对如图所示,两个位置像素一样,但是我们会天然的把它区分黑白,这得益于我们对图像的整体理解。基础的图像滤波只考虑局部的因素,如果要得到更好的效果需要进行整体考虑。
边缘可以用来区分物体,是图像分类、图像裁剪、图像拼接等操作的基础。
导数在边缘检测中应用
梯度
梯度定义:
含义: 是一个向量,表示沿着这个方向导数获得最大值,也就是变换最快
离散化表示
\nabla I(x,y)=\begin{bmatrix}{ {\Bbb d} \over {\Bbb d}x}I(x,y) \\ { {\Bbb d} \over {\Bbb d}y}I(x,y) \end{bmatrix} = \begin{bmatrix}I(x+1,y)-I(x,y) \\ I(x,y+1)-I(x,y)\end{bmatrix}边缘检测Sobel, Prewitt, RobertSobel算子为:
\begin{bmatrix}
1 & 2 & 1\\
0 & 0 & 0\\
-1 & -2 & -1
\end{bmatrix}
\quad
\begin ...
LLBP
本文为The last-level branch predictor的阅读笔记
context局部性
context: 每两个无条件分支之间的指令为一个context
pattern(模式): 该分支在不同的分支历史下会有不同的结果,每一种分支历史对应的结果称为一个模式。例如从不同位置调用某个函数时该函数内的分支可能有多种行为。如果某个历史长度下该模式提供了正确的预测,更短的历史长度便预测错误,那么称该模式为一个有用的模式。
观点:
如果某一个分支模式越多,那么他所需要的分支历史也越多
如果一个分支有多种模式,那么一个给定上下文只对部分模式有用
发现:
前十难预测分支的模式中平均分支数量为200
两个无条件分支之间平均包含3.89个条件分支。也就是说一个长度为200的分支将跨越50多个无条件分支
当上下文大小为2时,50%的分支每个上下文中包含3个有用的模式,当上下文大小为32时,95%的分支每个上下文中包含9个有用的模式。这说明我们可以将每个上下文中的模式限制在少数几个,这称为上下文局部性。
结构
RCR(rolling context register): 维护无条件 ...
Unity旋转
向量旋转首先我们需要知道旋转的角度,设为$\theta$
例如把AB旋转到AC,设$\angle XAB = \sigma$, B的坐标(x, y), C的坐标(a, b),半径为R,则
\begin{aligned}
AB =& R = \frac{x}{cos(\sigma)} = \frac{y}{sin(\sigma)}\\
AC =& R = \frac{a}{cos(\sigma + \theta)} = \frac{b}{sin(\sigma + \theta)}\\
a =& R * cos(\sigma + \theta) = R * cos(\sigma)cos(\theta) - R * sin(\sigma)sin(\theta)\\
=& \frac{x}{cos(\sigma)} cos(\sigma)cos(\theta) - \frac{y}{sin(\sigma)}sin(\sigma)sin(\theta)\\
=& x \times cos(\theta) - y \times sin(\theta)\\
b =& R * cos(\si ...
Tomasulo算法
冲突
结构冲突: 由于硬件资源争夺导致的冲突,例如同时两条指令产生访问请求,或者ICache和DCache同时对L2 Cache产生访问请求。
数据冲突: 数据冲突分为写后读冲突(RAW),写后写冲突(WAW),读后写冲突(WAR)。写后读可以认为写在读之后
控制冲突: 主要是分支指令导致的冲突
其中结构冲突和控制冲突无法避免,我们需要想办法消除数据冲突
WARADD F2, F0, F1SUB F3, F2, F4其中F2存在读后写相关RAWADD F2, F0, F1SUB F1, F3, F4其中F1存在写后读相关WAWADD F2, F0, F1SUB F2, F3, F4其中F2存在写后写相关
其中写后读相关是无法避免的,在乱序执行中必须要等待写完成才可以读,在顺序处理器中使用前推解决。而写后读相关和写后写相关在顺序处理器中是不存在的,但是在乱序处理器中可能存在问题。
例如写后写相关,本来存储器中最终保存的是SUB的数据,但是现在保存的是ADD的数据。而读后写相关调换位置就变成了写后读相关。
Tomasulo算法
大致步骤:
流水线前端的指令信息保存在指令队列中
根据指令 ...
tensorflow
本篇博客基于此。感谢龙龙老师提供的免费资料
tensorflow函数文档
下载文档
tensorflow基础数据类型
标量(Scaler): 单个实数,例如1.2,3.4等,维度为0,shape为[]
向量(Vector): 相当于数组,n个实数集合,维度为1, shape为[n]
矩阵(Matrix): n行m列。维度为2, shape为[n, m]
张量(Tensor): 所有维度大于2的都可以叫张量(其实上面的也可以是), 张量的每个维度也可以称作轴(Axis)。tf的运算时基于张量的,constant和Variable函数产生的都是张量
例如:a = tf.constant(1) #创建标量x = tf.constant([1. ,2 , 3]) #创建向量print(x)#输出为<tf.Tensor: id=165, shape=(3,), dtype=float32, numpy=array([1 , 2 , 3], type=float32)>m = tf.constant([[1, 2], [3, 4]])# ...
SQL语句速查
基础名词
数据库: 保存有组织数据的容器,一般是一个或一组文件
表: 表在数据库中,用来进行分类存储各式各样的信息。如果把数据库看为一个柜子,那么表就是一个个抽屉,里面装着一些文件。表在实际应用中可以是顾客清单,产品目录等。
列: 表是由列和行构成。例如一个城市信息表,它的列可以使地址,城市,州,邮政编码等等。
行: 行是表中的一个记录。例如一个学生信息表,一个行包含一个学生的名字、年龄、性别等信息。
主键: 是一列,这一列可以唯一的标识每一个行。例如身份证号可以唯一的标识每一个人,而姓名不可以。因此身份证号可以作为主键。
外键: 将这个表中的某一列和另外一个表中的列关联起来。如果另一个表的对应列中不存在那个数据那么这个表中就无法插入这个数据。外键不是键
注释: 有--、#、/*...*/三种,注意第一种后面要有一个空格
USE和SHOW
USE 数据库名:
使用某个数据库
SHOW DATABASES:
返回可用数据库的列表
SHOW TABLES:
展示数据库内列表的信息
SHOW COLUMNS FROM 列表名:
DESCRIBE 列表名作用与它相同
展示数 ...
RNN及其拓展
RNNRNN的特点是上一次输入会对下一次产生影响,相当于有了记忆功能,常用于自然语言处理。
这是RNN的结构图,它与传统神经网络的区别是在隐藏层有了一个循环。
这张图的含义是每一个时间点都可以有输出o,也可以没有。每一个时间点隐藏层输出作为下一个隐藏层的输入,也就是说该次训练对下一次训练会产生影响。
网上演示的时候隐藏层只有一层,这里就以一层为例。
隐藏层计算:z(h)(t)=U⋅x(t)+W⋅s(t−1) #s(t-1)是前一刻隐藏层输出s(t)=fh(z(h)(t))s(t)是隐藏层输出, fh是激活函数,一般使用tanh或LeRu。
输出层使用softmax函数进行转换,然后损失函数使用交叉熵
Lt=−∑(N, i=0)yi(t)log(oi(t))
其中yi是真实值,oi是预测值
BPTTBPTT是RNN所使用的反向传播算法。它和传统反向传播算法的区别是它还要照顾到W(前一层到这一层的权重)
大体上还是使用这四个式子
δk(t) 表示t时刻损失函数对output layer 节点的输入zk(t)的导数(也就是求上面方程中第一个式子)。
δk(t) = o(t) - 1
...
pagerank算法
基础算法pagerank算法假设不返回已经浏览过的页面。假设给定一个页面按照页面跳转到该页面下其他页面的概率为q,浏览厌烦后随机跳转到其他页面的概率为1-q
R(u) = (1-q) + q * \sum_{v \in B_u}\frac{R(v)}{N_v}其中$N_v$是v网页外链个数。1-q的含义是点击这个页面的概率,后面一部分是从其他页面跳转到这个页面的概率。
这种计算方式的问题是速度太慢,只有三个页面就要83次迭代。
矩阵求解
其中$A_{ij}$是第j个页面指向第i个页面的平均概率
假设$\vec{r}$是矩阵的特征向量,则从其他页面跳转到该页面按照$\vec{r} = qA\vec{r}$计算。
其中$\vec{r}$也就是前面式子中的R(v),A矩阵是前面式子中的$\frac{1}{N_v}$
而要获得初始概率可以使用$\vec{r} = \frac{1-q}{N}I\vec{r}$
其中I是单位矩阵,实际上也就是1-q
合并两个部分可以得到最终公式$\vec{r} = (qA + \frac{1-q}{N}I)\vec{r}$
nand flash控制
结构
引脚名称
引脚功能
I/$O_0$ - I/$O_7$
数据输入输出
CLE
命令锁存使能
ALE
地址锁存使能
$\overset{-}{CE}$
芯片使能
$\overset{-}{RE}$
读使能
$\overset{-}{WE}$
写使能
$\overset{-}{WP}$
写保护
$R/\bar{B}$
就绪/忙输出信号
$V_{cc}$
电源
$V_{ss}$
池
NC
不接
K9F1208U0M容量64mb,每一页的大小是512字节,并且每一页上还有额外的字节。也就是说总共有$2^{18}$个字节
读写nand的过程:
发出命令字
发出地址
读写数据
命令字及操作方法
命令
第一个周期
第二个周期
第三个周期
Read1(读)
00h/01h
-
-
Read2(读)
50h
-
-
Read ID(读芯片ID)
90h
-
-
Page Program(写页)
80h
10h
-
Block Erase(擦除块)
60h
D0h
-
Read Status(读状态 ...
K-means
概念k-means算法属于非监督学习,也就是事先不知道给的数据属于那一类,需要自己去分类。它的基本思想是把数据点密集的一群分成一类。
具体过程:
随机选择k个类的初始中心
在c次迭代中,对任意一个样本,求到各中心点之间的距离,将该样本归类到最近中心的那个类
使用均值等方法更新中心点。
如果两次更新匪类相同也结束
例如划分三个点(1, 1) (2, 3) (4, 6)是一类,那么新的中心点是((1+2+4)/3, (1+3+6)/3),不一定要在原有点上
实现import numpy as np# Function: K Means# -------------# K-Means is an algorithm that takes in a dataset and a constant# k and returns k centroids (which define clusters of data in the# dataset which are similar to one another).def kmeans(X, k, maxIt): # maxIt是初始化次数 ...