矩阵转置

Bert (Bi-directional Encoder Representations from Transformers) Pytorch 源码解读(一)

我们两清 提交于 2019-12-28 05:42:33
前言 Bert (Bi-directional Encoder Representations from Transfromers) 预训练语言模型可谓是2018年 NLP 领域最耀眼的模型,看过很多对 Bert 论文和原理解读的文章,但是对 Bert 源码进行解读的文章较少, 这篇博客 有一份 TensorFlow 版本的 Bert 源码解读,这里来对 Pytorch 版本的 Bert 源码记录一份 “详细” 注释。 这份基于 Pytorch 的 Bert 源码由 Espresso大神提供,地址在这 https://github.com/aespresso/a_journey_into_math_of_ml ,大家也可以在 Espresso大神 的 B站 观看他的视频,讲得非常不错。 今天记录的这一部分是 bert_model.py 文件,主要实现了 bert 的预训练模型搭建部分。 开始 1. 定义激活函数 def gelu(x): """Implementation of the gelu activation function. For information: OpenAI GPT's gelu is slightly different (and gives slightly different results): 0.5 * x * (1 + torch.tanh

Numpy

时间秒杀一切 提交于 2019-12-27 07:22:10
ndarray的优势—为什么快? 存储空间连续,访问速度快 可以并行执行-Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,所以,其效率远高于纯Python代码。 numpy基于矩阵,矩阵可以分块计算,所以可以实现并行 ndarray的属性 Shape—形状—注意:返回的是元组 ndim—维度的个数—就是shape的长度 size—元素个数=shape的各个值想乘 dtype—元素的类型 ndarray的形状 生成数组的方法 生成0和1的数组 np.ones(shape) np.ones_like(array)—根据给定数组生成一个形状一样的数组 np.zeros np.zeros_like 从现有数组生成 np.array--深拷贝 np.asarray--浅拷贝 生成固定范围的数组 np.linspace—start,stop,num 在star到stop之间等区间的选取num个数,注意:一定可以去到stop np.arange(start,stop,step) 以start未开始,每隔step取一个值 stop肯定取不到(左闭右开) 等于python的range np.logspace(start,stop,num) 以10为低的指数值,等比 生成随机数组 均匀分布 np.random.rand—0

矩阵操作

喜欢而已 提交于 2019-12-27 05:21:04
矩阵操作(数组) 题目描述 给定一个N阶初始矩阵,现有以下操作 TRANSLATE: 转置,即将aij变为aji,操作结束后输出矩阵 ADD: 将该矩阵与一矩阵相加得到一新矩阵,操作结束后输出这一新矩阵 MULTIPLY: 与该矩阵与一矩阵相乘得到一新矩阵,操作结束后输出这一新矩阵(此处不懂矩阵乘法请自行百度) SUM:输出两条对角线上元素之和(不重复计算) 输入 测试数据只有一组 输入的第一行给出一个整数N(1 <= N <= 5),代表矩阵的阶数 下N行代表这一矩阵,其数值都是整数 其后的每一行都是操作,数据保证输入合法 操作以 OVER 结束 输出 具体输出见样例 样例输入 2 1 0 0 1 TRANSLATE ADD 1 0 0 1 ADD 2 0 0 2 MULTIPLY 1 2 3 4 SUM OVER 样例输出 1 0 0 1 2 0 0 2 4 0 0 4 4 8 12 16 40 提示 # include <bits/stdc++.h> using namespace std ; void ts ( int a [ ] [ 100 ] , int n ) ; void add ( int a [ ] [ 100 ] , int n ) ; void mu ( int a [ ] [ 100 ] , int n ) ; void su ( int a [ ] [

矩阵微积分的一些实用结论与推导

断了今生、忘了曾经 提交于 2019-12-26 23:06:56
矩阵微积分的一些实用结论与推导 向量与矩阵的相关运算 矩阵的一元运算 矩阵的拉直算子 矩阵的迹 矩阵的行列式 伴随矩阵与矩阵的逆 矩阵的二元运算 矩阵的乘法 Hadamard乘积 Kronecker积 数量对向量的导数 数量对列向量的导数 对内积运算求导 对矩阵与向量的乘积求导 对二次型求导 矩阵对矩阵的导数 数量对矩阵的导数 对矩阵的一元运算求导 对拉直算子求导 对矩阵的迹求导数 对矩阵的行列式求导数 对矩阵的二元运算求导 对矩阵的乘法求导 对矩阵的Hadamard乘积求导 对矩阵的张量积求导 在一些优化问题中,经常会出现选择向量或者矩阵来最优化某个目标函数的情况,要想从理论上求解这类优化,就需要正确计算目标函数关于向量或者矩阵的导数。比如多元回归模型中,要用最小二乘法估计回归系数,需要做以下的最优化: min ⁡ β Q = ( Y − X β ) 2 {\min_{\beta}} Q=(Y - X\beta)^2 β min ​ Q = ( Y − X β ) 2 然而现有的教材和论文都只是需要什么就临时查证推导一下,很少有系统地总结目标函数怎么对向量或矩阵求导的资料。这篇博文比较全面地整理了向量与矩阵的一些常用运算,以及怎么对这些常用运算求导的方法。有张量积和拉平算子就足以解决大部分领域的问题了,所以这篇博文不会涉及张量以及张量分析的内容

稀疏矩阵算法

亡梦爱人 提交于 2019-12-26 22:50:13
1、稀疏矩阵的压缩存储  为了节省存储单元,可只存储非零元素。由于非零元素的分布一般是没有规律的,因此在存储非零元素的同时,还必须存储非零元素所在的行号、列号,才能迅速确定一个非零元素是矩阵中的哪一个元素。稀疏矩阵的压缩存储会失去随机存取功能。  其中每一个非零元素所在的行号、列号和值组成一个三元组(i,j,a ij ),并由此三元组惟一确定。  稀疏矩阵进行压缩存储通常有两类方法:顺序存储和链式存储。链式存储方法。 2、三元组表  将表示稀疏矩阵的非零元素的三元组按行优先(或列优先)的顺序排列(跳过零元素),并依次存放在向量中,这种稀疏矩阵的顺序存储结构称为三元组表。 注意:   以下的讨论中,均假定三元组是按行优先顺序排列的。        (1)三元组表的类型说明   为了运算方便,将矩阵的总行数、总列数及非零元素的总数均作为三元组表的属性进行描述。其类型描述为: #define MaxSize 10000 //由用户定义 typedef int DataType; //由用户定义 typedef struct { //三元组 int i,j;//非零元的行、列号 DataType v; //非零元的值 }TriTupleNode; typedef struct{ //三元组表 TriTupleNode data[MaxSize]; //三元组表空间 int m,n,t; /

unity shader之预备知识

北城以北 提交于 2019-12-26 20:09:18
1.渲染流水线 任务:从一个三维场景出发,生成(或者渲染)一张二维图像。即:计算机需要从一系列的定点出数据,纹理等信息出发,把这些信息最终转换程一张人眼可以看到的图像。而这个工作通常是由CPU和GPU共同完成的。 三个阶段: (1)应用阶段(CPU):1.准备场景数据。2.粗粒度剔除工作。3设置模型的渲染状态,输出渲染所需要的几何信息. 应用阶段大致可以分为三个阶段: 1.把数据加载到显存中。 2.设置渲染状态。渲染状态:定义场景中的网格是怎样被渲染的。如:使用那个顶点着色器/片元着色器。 3.调用DrawCall。DrawCall是一个命令,发起方为CPU,接收方为GPU。 (2)几何阶段:把定点坐标变换到屏幕空间中,再交给光栅器进行处理。对输入的渲染图源进行多部处理后,将会输出屏幕空间的二维顶点坐标,每个定点对应的深度值,着色等相关信息。 (3)光栅化阶段:产生屏幕上的像素,并渲染最终的图像。光栅化的任主要是决定每个渲染图源中的那些像素应该被绘制再屏幕上。对上一阶段得到的逐定点数据进行插值,然后再进行逐像素处理。 为了避免我们看到的那些正在进行光栅化的图元,GPU会使用双重缓冲策略(前置缓冲,后置缓冲)。当场景被渲染到后置缓冲中,GPU会交换前后置缓冲中的内容,前置缓冲事之前显示在屏幕上的图像。 (1)顶点着色器:处理单位是顶点,输入进来的每个定点都会调用一次定点着色器

线代:1.9SVD的应用与多元线性回归

狂风中的少年 提交于 2019-12-26 10:49:29
文章目录 任务详解: Svd分解的应用 1.图像压缩 传统网络图片传输与现代传输的原理 2.矩阵乘法加速 多元线性回归 情况1,N>n,样本数>维度(参数个数) 情况2,N 任务详解: 这节课主要介绍了SVD分解的应用,多元线性回归等知识点。 掌握目标: 1、掌握svd分解的应用以及意义 2、掌握多元线性回归,以及矩阵表达形式,以及样本个数和维数不同情况下解的情况 Svd分解的应用 先回顾SVD,就是在矩阵A左右两边分别乘以 U H U^H U H 和 V V V ,得到一个对称矩阵,最后通过证明得到了下面的形式: A = U [ Σ 0 0 0 ] V T (1) A=U\begin{bmatrix} \Sigma &0 \\ 0 & 0 \end{bmatrix}V^T\tag{1} A = U [ Σ 0 ​ 0 0 ​ ] V T ( 1 ) 上式中各自的shape如下: A:m×n U:m×m [ Σ 0 0 0 ] \begin{bmatrix} \Sigma &0 \\ 0 & 0 \end{bmatrix} [ Σ 0 ​ 0 0 ​ ] :m×n V T V^T V T :n×n 如果矩阵A的秩R(A)=r,则 Σ \Sigma Σ 是r×r对角阵,对角线上的元素就是 A T A A^TA A T A 的不为0的特征值,把U写成列向量的形式 [ u 1 , u 2

C#矩阵运算类

只谈情不闲聊 提交于 2019-12-26 10:01:20
命名空间:matrix 定义类:Matrix 方法: public Matrix(int mm, int nn) 定义矩阵A: Matrix A=new Matrix(int mm, int nn); public double read(int i, int j) 获取Aij: A.read(i,j); public int write(int i, int j, double val) 将数据b写入Aij: A.read(i,j,b); 释放矩阵: public void freeMatrix() A.freeMatrix(); 方法: //C = A + B //成功返回1,失败返回-1 public int add(ref Matrix A, ref Matrix B, ref Matrix C) //C = A - B //成功返回1,失败返回-1 public int subtract(ref Matrix A, ref Matrix B, ref Matrix C) //C = A * B //成功返回1,失败返回-1 public int multiply(ref Matrix A, ref Matrix B, ref Matrix C) //行列式的值,只能计算2 * 2,3 * 3 //失败返回-31415,成功返回值 public double det(ref

Matlab操作矩阵的相关方法

社会主义新天地 提交于 2019-12-26 09:34:47
Matlab操作矩阵的相关方法 下面这篇文章主要是对吴恩达老师机器学习中matlab操作的一个整理和归纳 一、基本操作 1.生成矩阵( ones、zeros ) A = [1 2;3 4;5 6] #生成3行4列的矩阵 B = [1 2 3] #B就是一个行向量 C = [1;2;3] #定义c为一个列向量 D = 1:0.1:2 #定义开始值为1,步长为0.1,结束值为2的一个行向量 E = 1:6 #定义开始值为1,步长默认为1,结束值为6的行向量 ones(2,3) #矩阵中所有元素都为1 定义一个2行3列的矩阵 zeros(2,3) #矩阵中所有的元素都为0 定义一个2行3列的矩阵 2.生成随机矩阵( rand、randn ) rand(1,3) #生成1行3列的随机矩阵 randn(2,3) #生成高斯随机矩阵,高斯随机矩阵即为标准差或方差为1 3.生成单位矩阵( eye(n) ) eye(n) #生成n行n列的单位矩阵 4.帮助命令( help ) help 变量名 #可查看函数的API详解 二、移动数据 1.操作.txt文件( load ) 1.1 加载.txt文件并且拆分文件的行和列的值 data = load('文件路径') #加载文件 获取多列的数据(获取多行的数据和多列类似,只需要修改第一个参数即可) data(:,1) #拿到所有行第一列的数据 data(:

MATLAB基础(3)

落爺英雄遲暮 提交于 2019-12-26 09:34:29
1.MATLAB的运算 本次介绍的是MATLAB中的运算符。分别有算术运算符,关系运算符和,逻辑运算符。 表3.1 算术运算符 运算符 说明 运算符 说明 + 加法 .\ 左除法 - 减法 \ 矩阵左除法 .* 乘法 .^ 求幂 * 矩阵乘法 ^ 矩阵求幂 ./ 右除法 .' 转置 / 矩阵右除法 ' 矩阵求秩,复数求共轭 表3.2 关系运算符 运算符 说明 函数 < 小于 lt(a,b) <= 小于等于 le(a,b) > 大于 gt(a,b) >= 大于等于 ge(a,b) == 恒等于 eq(a,b) ~= 不等于 ne(a) 表3.3 逻辑运算符与函数对应表 运算符 说明 函数 & 与运算 and(a,b) | 或运算 or(a,b) ~ 非运算 not(a) xor 异或 xor(a,b) 2.MATLAB的矩阵 表3.4 构造特殊矩阵函数表 函数 说明 ones(n); ones(n,m) 建立一个元素都为1的矩阵 zeros(n); zeros(n,m) 建立一个元素都为0的矩阵 eye(n); eye(n,m) 建立一对角线元素为1,其他元素都为0的矩阵 diag(v); diag(X); diag(v,k); diag(X,k) 将一个向量变成一个对角矩阵,或求一个矩阵的对角元素 magic(n) 建立一个方阵使得它的每一行,每一列,和对角线元素的和都相等