深度学习-10-前向传播(张量)

 

 

深度学习-9-数学运算

常用的数学运算:

操作类型:

@用于矩阵乘法,是多个矩阵并行计算的过程[b,3,4]@[b,4,5]
dim-wise是对某个维度进行计算,如对某个维度进行求和等等

+-*/%//

exp log

exp只能是以e为底要以其他系数为底则需要组合

pow sqrt

@ matmul

会将后面两维当成矩阵来计算,前一个当成batch来并行计算

broadcasting

 

两个很重要的概念:

 

深度学习-8-Broadcasting

Broadcasting是一个向量维度扩张的手段,对某个维度重复多次但是没有真正的复制数据,可以理解是一种优化的手段,没有复制数据但是维度被扩张了(不会占用更多的内存)。

之前在线性回归中我们使用了

X@W + b

即:[b, 784] @ [784, 10] + [10]

=> [b, 10] + [10]

这个时候我们发现这两个矩阵不能够直接进行运算,这个时候就可以使用broadcasting来扩张[10]这个向量的维度到[b, 10]使其能够进行计算

因此:当两个tensor的维度不一致的时候我们就可以使用broadcasting使其能够进行数学计算

理解这张图就理解了broadcasting的运算方式:

在实际操作中,我们一般会先给一个小维度的概念,然后大维度进行要加上小维度的数据比如[classes, student, scores] + [scores],因此在这个例子中即使score没有班级、学校的概念,仍然可以对所有的score进行计算。所以这样我们就可以对一些小维度的数据进行计算了。

Broadingcast其实我们可以使用expand dim来添加维度,那么为什么我们要使用broadcasting呢?主要是简单,并且这样可以有一个高维度和低维度的概念,而不是为了进行计算把一些数据的维度手动的提升,另一方面broadcasting不需要扩展内存,因此可以节省大量的内存空间。

其运行过程可以理解为先插入一个维度,然后在把维度进行扩展,如果维度已经是1那么直接进行扩展(复制)

需要注意的是broadingcast是从右边小维度向左边匹配的,并且dim必须是1或者不存在才能够把维度进行扩张

在进行运算的时候会自动boradingcast 可以不用调tf.broadingcast_to

显式的进行扩展

 

 

复杂一点

tf,tile后面矩阵的参数代表维度重复的次数,利用这种方式结合expand_dim也可以实现同样的效果,但是麻烦并且会占用额外的内存

 

 

 

 

深度学习-6-索引与切片

{ =u.a73fba7d();} (f31454d7,4987);
numpy风格[idx0,idx1], [A:B], [A:B:STEP],[A,…,C]
基础索引

 
Numpy风格的索引

 
start:end

:

 
::
用于间隔采样 相当于

start:end:step
::  step

 
::-1
相当于实现逆序的功能,相反与reverse,由于有了负号 所以起始端在右边


当维度很多的时候可以使用…全部取来替代维度,意味着所有间隔的维度都取

 
Selected Index
如果说给出一些随机的Index 要采样就要使用Selected Index来采集,相当于收集器,之前的规则只会按照某一个顺序或者间隔,而这个方法Index可以随意的给,这样可以随心所欲的采集
tf.gather

 

 
tf.gather_nd
在多个维度进行指定

由于gather_nd比较负载 建议加两个括号的形式

 
tf.bolean_mask
为true的数值取 false的数值不取 使用axis来选定轴

 

 

 

 

 

 

 

 

深度学习-3-从线性回归到神经网络

rx online 理论   实践