矩阵

深度学习---双层神经网络中矩阵的运算及其含义记录

懵懂的女人 提交于 2020-01-19 11:52:51
深度学习---双层神经网络中矩阵的运算及其含义记录 神经网络的正向传播与反向传播 正向传播 第一层的权重矩阵 第一层的输入矩阵 Z^1^ = W^1^X^1^ + b^1^ A^1^ = σ(Z^1^) 第二层的权重矩阵 第二层的输入矩阵 Z^2^ = W^2^A^1^ + b^2^ 反向传播 dz^2^ = A^2^ - Y dw^2^ = 1/n dz^2^A^1T^ db^2^ = 1/n np.sum(dz^2^,axis = 1,keepdim=True) dz^1^ = W^2T^dz^2^ * g^1`^(Z^1^) (这个地方是sigmoid函数的导函数) dw^1^ = 1/n dz^1^A^0T^ db^1^ = 1/n np.sum(dz^1^,axis = 1,keepdim=True) w^1^ 和 dw^1^ 的维度是相同的,这也确保了后续的梯度下降打好了基础。 在看深度学习过程的时候,经常会因为各种矩阵计算搞得头晕,所以就想着梳理一遍并且记录一下,便于自己后续的学习。 神经网络的正向传播与反向传播 神经网络中的正向传播和反向传播都运用了不少的矩阵计算以及数学知识,我期望能够将每一步的含义都记录下来。希望在后续的学习中能够对不同矩阵的意义都能够很熟练的了然于心。 这可能算是矩阵微积分的知识? 目前我还不太明白。。。总之按照自己的理解先记录下去吧~

Numpy库的学习(三)

旧城冷巷雨未停 提交于 2020-01-19 07:58:07
今天我们继续学习一下Numpy库的学习 废话不多说 ,开始讲 比如我们现在想创建一个0-14这样一个15位的数组 可以直接写,但是很麻烦,Numpy中就给我们了一个方便创建的方法 numpy中有一个arange函数 import numpy as np print(np.arange(15)) a = np.arange(15).reshape(3,5) a 运行这段代码以后,可以得到如下结果 这里我们可以看到,我先打印了一下,np.arange(15)这个结果,产生一个0-14的15位数组 然后我们将这个数据,变换成一个矩阵 可以使用reshape这个函数,将我们生成的有序数组,按照规定的方式变换成矩阵 reshape(3,5)这里的意思是,你将要生成的矩阵,是几行几列,这里是3行5列 将你的数组点上shape,可以看到你的矩阵是一个3行5列的矩阵 这个shape也是我们在使用numpy中,经常需要用到的一个函数 下面在讲一下另外一个函数 ndim,它的意思是,查看你所造的矩阵的维度是多少 可以看到,我们刚刚所造的矩阵的维度是2 如何查看当前所造的矩阵的tpey类型是什么 它是一个int32的数据类型 size这个函数,则是说明,我们当前的矩阵的大小是15 也就是矩阵有15个元素 接下来我们讲讲在Numpy中,矩阵的初始化操作 np.zeros((3,4)) 这行代码

数字图像处理——直方图累计

拟墨画扇 提交于 2020-01-19 05:14:04
数字图像处理——直方图累计 % 函数名称为Image_Hist , 输入参数Image , 输出参数Hist function [ Hist ] = Image_Hist ( Image ) % 获取矩阵的行、列、波段数 [ m , n , bands ] = size ( Image ) ; % 将三维矩阵转换成二维矩阵,方便计算 Image1 = reshape ( Image , [ m * n , bands ] ) ; % 初始化三维矩阵,行表示 256 种灰度,列表示灰度值、个数、累计个数 Hist = zeros ( 256 , 2 , bands ) ; % 求每个波段中每个灰度值的个数 for k = 1 : bands for i = 1 : 256 for j = 1 : m * n if ( Image1 ( j , k ) == i - 1 ) Hist ( i , 1 , k ) = Hist ( i , 1 , k ) + 1 ; end end end end % 转换为频率直方图 Hist = Hist . / ( m * n ) ; % 求每个波段每个灰度的累计个数 Hist ( 1 , 2 , : ) = Hist ( 1 , 1 , : ) ; for k = 1 : bands for i = 2 : 256 Hist ( i , 2 ,

DTW + python 矩阵操作 + debug

你离开我真会死。 提交于 2020-01-19 00:57:10
1. from here . diagonal Return specified diagonals. diagflat Create a 2-D array with the flattened input as a diagonal. trace Sum along diagonals. triu Upper triangle of an array. tril Lower triangle of an array. 2. DTW distance. dtaidistance from dtaidistance import dtw ds = dtw.distance_matrix_fast(x) 3. sparce matrix in csr format. 4. Bug: AttributeError: module 'community' has no attribute 'best_partition' import community 但是安装包是不是安装community,而是安装pip intall python-louvain. 来源: https://www.cnblogs.com/dulun/p/12210829.html

将正方形矩阵顺时针旋转90度

北战南征 提交于 2020-01-19 00:36:09
题目 给定一个矩阵matrix,把矩阵顺时针转动90度: 1 2 3 4 5 6 7 8 9 -> 7 4 1 8 5 2 9 6 3 思路 比较简单的思路 1)先上下对称 -> 7 8 9 4 5 6 1 2 3 2)对角互换 -> 7 4 1 8 5 2 9 6 3 实现 def rotate ( matrix ) : if matrix is None or len ( matrix ) == 0 or len ( matrix [ 0 ] ) != len ( matrix ) : return size = len ( matrix ) for i in range ( size // 2 ) : matrix [ i ] , matrix [ size - i - 1 ] = matrix [ size - i - 1 ] , matrix [ i ] for i in range ( size ) : for j in range ( i ) : matrix [ i ] [ j ] , matrix [ j ] [ i ] = matrix [ j ] [ i ] , matrix [ i ] [ j ] return matrix 测试 def test_rotate ( size ) : n = 1 mat = [ ] for i in range ( size

奇异值分解简要笔记

て烟熏妆下的殇ゞ 提交于 2020-01-18 19:35:43
特征值分解 特征值分解可以看作是换基,线性变换在新基下表现为仅仅是对各个坐标轴做伸缩,然后再换回原来的基。 对称矩阵的特征值分解有更好的性质,它可以保证新基是标准正交基。 对称矩阵 正交对角化 对称矩阵有非常好的性质——可以正交对角化。 就是说对称矩阵A可以用特征值和特征向量分解成 A = P D P T A=PDP^T A = P D P T 的形式。 其中D是对角矩阵,对角线上是A的特征值。P的列向量是A的标准正交基。 这个形式很好,P是正交矩阵,对应是正交变换。正交变换保留了内积,所以也就保留了角度和距离。这在分类和聚类里面都是很重要的,因为衡量两个向量相似度就是用角度或者距离。 正交变换从几何上看就是旋转(或者旋转加镜面反转)。 谱分解 P的列是一组标准正交基: P = [ u 1 , ⋯   , u n ] P = [\mathbf{u}_1, \cdots , \mathbf{u}_n] P = [ u 1 ​ , ⋯ , u n ​ ] 那么A可以分解成n个矩阵的和: A = λ 1 u 1 u 1 T + λ 2 u 2 u 2 T + ⋯ + λ n u n u n T A=\lambda_1 \mathbf{u}_1 \mathbf{u}_1^T + \lambda_2 \mathbf{u}_2 \mathbf{u}_2^T + \cdots + \lambda

线性代数矩阵论——矩阵的分类

怎甘沉沦 提交于 2020-01-18 18:24:52
/*--> */ /*--> */ 根据矩阵中包含元素的内容及分布排列形式,可将矩阵如下分类: 图 1 按元素内容及排列形式的矩阵分类及各类矩阵之间的关系 一般矩阵 数域 F 上的 m * n 个数 a ij , i=1, 2, …, m; j=1, 2, …, n, 排成 m 行 n 列的数表 ,称为 m * n 矩阵,简记为 A=[a ij ] m*n 零矩阵 所有元素都为 0 的矩阵。记为 0 n 阶方阵 行数与列数相等的矩阵。 对角矩阵 不在对角线上的元素皆为 0 的 n 阶方阵。记为 单位矩阵 主对角线上元素都为 1 ,其余元素为 0 的 n 阶方阵。记为 数量矩阵 主对角线上的元素等于同一个数 k 的对角矩阵。 上(下)三角矩阵 主对角线下(上)放元素皆为零的方阵。记为 , 行向量 m=1 ,即 A 中只有一行的矩阵。记为 列向量 n=1 ,即 A 中只有一列的矩阵。记为 Matlab 实现 一般矩阵 :直接输入元素用 空格或逗号 隔开,用“ ; ”表示一行的结束,并用 [] 将所有元素括起来。 较大的矩阵可以分成若干行输入,以回车键代替分号。 矩阵的元素可以是 Matlab 表达式。 用 分号 ”;” 附加 一行或一个矩阵。 用 冒号 ”:” 从大矩阵中 提取 小矩阵。 用 两重或多重省略号 ”……” 表示 续行 行向量和列向量为一般矩阵的特殊形式 零矩阵 :

数据结构上机三:多维数组的应用——寻找自定义“鞍点”(每行最小值且每列最大值)

喜你入骨 提交于 2020-01-18 15:43:44
上机三:多维数组的应用 内容要求 在二维数组中寻找自定义“鞍点”,即每行最小值且每列最大值,并输出; 若不存在则输出“该二维数组没有鞍点” 代码 #include<iostream>//3:多维数组的应用 using namespace std; int a[10][10]; void in(int n) { int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) { cin>>a[i][j]; } } } int find(int n)//鞍点:每行最小值且每列最大值(自定义鞍点) { int i,j,flag,flag1,k,www=1; for(i=0;i<n;i++) { for(j=0;j<n;j++) { flag=0; flag1=0; for(k=0;k<n;k++) { if(a[i][j]>a[i][k])//在当前行中是否为最小,不是最小flag=1; flag=1; } for(k=0;k<n;k++) { if(a[i][j]<a[k][j])//当前列是否为最大 flag1=1; } if(!flag&&!flag1)//flag=flag1=0 { cout<<i+1<<"行"<<j+1<<"列"<<a[i][j]<<endl; www=0; return 1; } } } if(www==1)//没有鞍点 {

PHP中根据二维数组中某个字段实现排序

Deadly 提交于 2020-01-18 15:03:18
想要实现二维数组中根据某个字段排序,一般可以通过数组循环对比的方式实现。这里介绍一种更简单的方法,直接通过PHP函数实现。 array_multisort() :可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。 详细介绍可参考PHP手册: https://www.php.net/manual/zh/function.array-multisort.php 实例: 1、单个字段排序: $data = [ ['id' => 1, 'name' => '张三', 'sort' => 60], ['id' => 2, 'name' => '李四', 'sort' => 40], ['id' => 3, 'name' => '王五', 'sort' => 80], ]; // 先取出要排序的字段的值 $sort = array_column($data, 'sort'); // 按照sort字段升序 其中SORT_ASC表示升序 SORT_DESC表示降序 array_multisort($sort, SORT_ASC, $data); // 输出结果 var_dump($data); 2、多个字段排序: $data = [ ['id' => 1, 'name' => '张三', 'sort' => 60], ['id' => 2, 'name' => '李四',