矩阵乘法

动手学深度学习之Task09:目标检测基础;图像风格迁移;图像分类案例1

江枫思渺然 提交于 2020-02-25 23:51:18
目标检测基础 9.4 锚框 目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边缘从而更准确地预测目标的真实边界框(ground-truth bounding box)。不同的模型使用的区域采样方法可能不同。这里我们介绍其中的一种方法:它以每个像素为中心生成多个大小和宽高比(aspect ratio)不同的边界框。这些边界框被称为锚框(anchor box)。我们将在后面基于锚框实践目标检测。 9.4.1 生成多个锚框 假设输入图像高为 h,宽为w。我们分别以图像的每个像素为中心生成不同形状的锚框。设大小为s∈(0,1]且宽高比为r>0,那么锚框的宽和高将分别为wsr和hs/r。当中心位置给定时,已知宽和高的锚框是确定的。 下面我们分别设定好一组大小s1,…,sn和一组宽高比r1,…,rm。如果以每个像素为中心时使用所有的大小与宽高比的组合,输入图像将一共得到whnm个锚框。虽然这些锚框可能覆盖了所有的真实边界框,但计算复杂度容易过高。因此,我们通常只对包含s1或r1的大小与宽高比的组合感兴趣,即 (s1,r1),(s1,r2),…,(s1,rm),(s2,r1),(s3,r1),…,(sn,r1). 也就是说,以相同像素为中心的锚框的数量为n+m−1。对于整个输入图像,我们将一共生成wh(n+m−1)个锚框。

Numpy基础

可紊 提交于 2020-02-25 19:56:54
一、numpy的属性 import numpy as np 此语法导入了numpy库,并且给numpy起了一个别称np用来方便以后的使用。 下面定义一个矩阵: array = np . array ( [ [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] ] ) print ( array ) 执行: print ( array . ndim ) 可以查询到矩阵,输出结果为3。还有一些操作如下: print ( array . shape ) #输出矩阵形状 print ( array . size ) #输出矩阵大小 print ( array . dtype ) #显示矩阵的元素类型 二、创建array import numpy as np a = np . array ( [ 1 , 2 , 3 ] , dtype = np . int32 ) #创建一个内容为1,2,3,数据类型为整形32位的数组 print ( a . dtype ) 创建一个二维矩阵,注意中括号数目: d = np . array ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] ) #创建一个二维矩阵 print ( d ) 生成一个2行3列的零矩阵: zero = np . zeros ( ( 2 , 3 ) ) print (

游戏 图形方面 面试题

∥☆過路亽.° 提交于 2020-02-23 19:34:49
图形学渲染流程(管线)说一下 答: 传统的前向渲染管线流程是这样的 顶点和索引到顶点着色器,这里主要是对顶点进行变换,然后是光栅化,这里将剔除视锥体之外的元素,光栅化后三角形内的像素将进入到片元着色器(像素着色器),经过深度测试(模板测试)后写入到Target缓冲区内。 其实还有计算shader,用于曲面细分的三个shader,几何shader,RayTrace shader等,不展开了。 BDRF函数 答:BRDF函数是射出光线的辐照度和摄入光线辐射率的比值,在现代引擎中BRDF一般使用Cook-Torrance 的公式,定义为F菲涅尔(F0,NV) G(L,N,V) 几何函数 D(N,H,Roughness) 法线分布函数(H为L,V的半角向量) 除以4*(NL)*(NV) IBL基本原理 答: 在PBR渲染公式中,我们不仅仅算直接光源,也要考虑来自环境的间接光源,因此把来自环境光的信息储存在cubeMap中供计算,这就是IBL,基于图形的光照,在这种情况下需要对光照方程进行分割,分为环境光和镜面光两部分,为了提高速度一般都会把这些卷积的结果存储在贴图里面,对于漫反射,存不同法线下的卷积结果,对于高光需要先分拆为 预滤波环境贴图和预计算BRDF,这里有一个N=V=R的假设,基于重要性采样,可以把第二项看为参数为NWi和Roughness参数的二维函数,就可以预计算贴图

numpy矩阵乘法中的multiply,matmul和dot

不打扰是莪最后的温柔 提交于 2020-02-22 09:56:37
用numpy做矩阵运算时,少不了用到矩阵乘法。本文帮你迅速区分 multiply , matmul 和 dot 的区别。 numpy官方文档中的说明:(想深入了解可以一戳) multiply : https://docs.scipy.org/doc/numpy/reference/generated/numpy.multiply.html dot : https://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html matmul : https://docs.scipy.org/doc/numpy/reference/generated/numpy.matmul.html 1. multiply(矩阵点乘) 先说说更简单的multiply, 如果两个维度完全一样的矩阵用multiply做乘法,那么它们只是进行对应位置元素之间的乘法 ,得到一个同样维度的矩阵输出。 import numpy as np a = np.array([[0,1,2], [1,2,3], [3,4,5]]) b = np.array([[1,1,2], [2,2,1], [1,1,2]]) print(np.multiply(a, b)) 输出: array([[ 0, 1, 4], [ 2, 4, 3], [ 3, 4, 10]])

潜在语义分析(LSA)的原理讲解以及python实现

独自空忆成欢 提交于 2020-02-21 11:27:46
在传统的文本信息处理中,以单词向量表示文本的语义内容,以单词向量空间的度量来表示文本之间的语义近似度。这种方法不能准确表示语义。 潜在语义分析试图从大量的文本数据中发现潜在的话题,以话题向量来表示文本的语义内容,以话题向量的空间度量更准确地表示文本之间的语义相似度。 潜在语义分析使用的是非概率的话题分析模型,具体来说,就是将文本集合表示为单词-文本矩阵,对单词-文本矩阵进行奇异值分解,从而得到话题向量空间,以及文本在话题向量空间的表示。可采用的矩阵分解方法有: 奇异值分解、非负矩阵分解。 给定一个含有 n n n 个文本的集合 D = { d 1 , d 2 , ⋯   , d n } D=\{d_1,d_2,\cdots,d_n\} D = { d 1 ​ , d 2 ​ , ⋯ , d n ​ } ,以及在所有文本中出现的 m m m 个单词 W = { w 1 , w 2 , ⋯   , w m } W=\{w_1,w_2,\cdots,w_m\} W = { w 1 ​ , w 2 ​ , ⋯ , w m ​ } ,则将单词在文本中出现的数据用一个单词-文本表示,记作 X X X 。 X = [ x i j ] m × n X = [x_{ij}]_{m\times n} X = [ x i j ​ ] m × n ​ 其中,元素 x i j x_{ij} x i j ​

numpy学习(一)

心已入冬 提交于 2020-02-21 10:12:49
numpy学习(一) import numpy as np #定义一个数组 arr = np . array ( [ [ 1 , 2 , 3 ] , [ 2 , 3 , 4 ] ] ) print ( arr ) [[1 2 3] [2 3 4]] #数组的维数 arr . ndim 2 #数组几行几列 arr . shape (2, 3) #数组的长度 arr . size 6 #定义类型 int64/32 float32/64 32和64的区别在于精度 a = np . array ( [ 1 , 25 , 5 ] , dtype = np . float32 ) print ( a ) [ 1. 25. 5.] #生成0矩阵 括号内是几行几列 np . zeros ( ( 3 , 4 ) ) array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]]) #生成全是1的矩阵 np . ones ( ( 3 , 4 ) , dtype = np . int16 ) array([[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], dtype=int16) #生成空矩阵 print ( np . empty ( ( 3 , 4 ) ) ) [[1. 1. 1. 1.] [1. 1. 1.

Eigen入门之密集矩阵 3 - Array操作

最后都变了- 提交于 2020-02-20 08:16:24
简介 在Eigen内,有Matrix,vector进行线性代数的相关运算,但也需要执行对矩阵内的系数的相关操作时,这是正常的功能需求。Eigen中的Array类就是满足此需求的。 Array 定义 和前面介绍的Matrix和Vector类似,Array类也是一个模板类 /** \class Array * \ingroup Core_Module * * \brief General-purpose arrays with easy API for coefficient-wise operations * * The %Array class is very similar to the Matrix class. It provides * general-purpose one- and two-dimensional arrays. The difference between the * %Array and the %Matrix class is primarily in the API: the API for the * %Array class provides easy access to coefficient-wise operations, while the * API for the %Matrix class provides easy

矩阵乘法

一曲冷凌霜 提交于 2020-02-17 16:13:25
问题描述   有n个矩阵,大小分别为a0 a1, a1 a2, a2 a3, …, a[n-1] a[n],现要将它们依次相乘,只能使用结合率,求最少需要多少次运算。   两个大小分别为p q和q r的矩阵相乘时的运算次数计为p q r。 输入格式   输入的第一行包含一个整数n,表示矩阵的个数。   第二行包含n+1个数,表示给定的矩阵。 输出格式   输出一个整数,表示最少的运算次数。 样例输入 3 1 10 5 20 样例输出 150 数据规模和约定   1<=n<=1000, 1<=ai<=10000。 # include <stdio.h> # include <string.h> # define INF (911111111111111111) long long min ( long long , long long ) ; long long solve ( int , int , int n , long long [ ] [ 2 ] , long long [ ] [ 1000 + 1 ] ) ; int main ( void ) { int n , i , j ; scanf ( "%d" , & n ) ; long long sz [ n + 2 ] [ 2 ] ; for ( i = 1 ; i <= n + 1 ; i ++ ) { scanf (

python机器学习:推荐系统实现(以矩阵分解来协同过滤)

我们两清 提交于 2020-02-17 15:21:28
原文链接: http://tecdat.cn/?p=10911 用户和产品的潜在特征编写推荐系统矩阵分解工作原理使用潜在表征来找到类似的产品。 1. 用户和产品的潜在特征 我们可以通过为每个用户和每部电影分配属性,然后将它们相乘并合并结果来估计用户喜欢电影的程度。 ​ 相同的计算可以表示为矩阵乘法问题。首先,我们把用户属性放在一个名为U的矩阵中,在这个例子中是5,-2,1,-5和5。然后,我们把电影属性放在一个名为M的矩阵中,我们使用矩阵乘法来找出用户的评分。 ​ 但要做到这一点,我们必须已经知道用户属性和电影属性。为每个用户和每部电影提供属性评级并不容易。我们需要找到一种自动的方法。我们来看看电影评分矩阵, ​ 它显示了我们数据集中的所有用户如何评价电影。这个矩阵非常稀疏,但它给了我们很多信息。例如,我们知道用户ID2给电影1号五颗星。所以,基于此,我们可以猜测,这个用户的属性可能类似于电影的属性,因为它们匹配的很好。换句话说,我们有一些线索可以使用。 让我们看看我们如何利用这些线索来了解每部电影和每个用户。在我们刚刚看到的等式中,U乘M等于电影等级,我们已经知道一些用户的实际电影等级。我们已经拥有的电影评分矩阵是我们方程式的解决方案。虽然它是解决方案的一部分,但是这个阵列仍然有很多漏洞,但对于我们来说,这已经足够了。 ​ 实际上,我们可以使用目前为止我们所知道的电影评级

oj.Matrix Power Series 1003矩阵乘法+快速取幂

元气小坏坏 提交于 2020-02-17 06:15:23
#include"stdio.h" #include"iostream" #include"algorithm" #include"map" using namespace std; int n,k,M; struct Matrix { void init() { memset(m,0,sizeof(m)); } Matrix operator *(Matrix t) { Matrix t1; t1.init(); for(int i=0;i<n;++i) for(int j=0;j<n;++j) { for(int k=0;k<n;++k) t1.m[i][j]+=m[i][k]*t.m[k][j]; t1.m[i][j]%=M; } return t1; } Matrix operator+(Matrix t) { for(int i=0;i<n;++i) for(int j=0;j<n;++j) t.m[i][j]=(t.m[i][j]+m[i][j])%M; return t; } void print() { for(int i=0;i<n;++i) { for(int j=0;j<n;++j) printf(j==0?"%d":" %d",m[i][j]); puts(""); } } int m[35][35]; }; map< int ,Matrix > mp