1、tf.matmul() ---- np.dot() : 矩阵乘法
tf.multiply ---- np.multiply() : 矩阵点乘,矩阵对应元素各自相乘
2、TensorFlow用张量这种数据结构表示所有数据。
“零阶张量”:没有方向的数值,标量。
“一阶张量”:有且仅有一个方向的数值,矢量,向量。
“二阶张量”:能够同时具有两个方向的数值,矩阵。
3、tf.random_normal() 与 tf.truncated_normal() 进行张量初始化详解与对比
(1)tf.random_normal:从正态分布中输出随机值。
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
参数说明:
shape: 一维的张量,也是输出的张量。
mean: 正态分布的均值。
stddev: 正态分布的标准差。
dtype: 输出的类型。
seed: 一个整数,当设置之后,每次生成的随机数都一样。
name: 操作的名字。
(2)tf.truncated_normal:从截断的正态分布中输出随机值。 生成的值服从具有指定平均值和标准偏差的正态分布,
产生正态分布的值如果与均值的差值大于两倍的标准差则丢弃重新选择。
tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
在正态分布的曲线中,横轴区间(μ-σ,μ+σ)内的面积为68.268949%。 横轴区间(μ-2σ,μ+2σ)内的面积为95.449974%。
横轴区间(μ-3σ,μ+3σ)内的面积为99.730020%。 X落在(μ-3σ,μ+3σ)以外的概率小于千分之三,在实际问题中常认为相应的事件是不会发生的,
基本上可以把区间(μ-3σ,μ+3σ)看作是随机变量X实际可能的取值区间,这称之为正态分布的“3σ”原则。
在tf.truncated_normal中如果x的取值在区间(μ-2σ,μ+2σ)之外则重新进行选择,这样保证了生成的值都在均值附近。
4、tf.boolean_mask(a,b)
其中 b 一般是 bool 型的 n 维向量,若 a.shape=[3,3,3], b.shape=[3,3], 则 tf.boolean_mask(a,b) 将使 a(m维) 矩阵仅保留
与 b 中“True”元素同下标的部分,并将结果展开到m-1维。例:应用在YOLO算法中返回所有检测到的各类目标(车辆、行人、交通标志等)的位置信息(bx,by,bh,bw)。
a = np.random.randn(3, 3,3)
b = np.max(a,-1)
c= b >0.5
print("a="+str(a))
print("b="+str(b))
print("c="+str(c))
with tf.Session() as sess:
d=tf.boolean_mask(a,c)
print("d="+str(d.eval(session=sess)))
a=[[[-1.25508127 1.76972539 0.21302597]
[-0.2757053 -0.28133549 -0.50394556]
[-0.70784415 0.52658374 -3.04217963]]
[[ 0.63942957 -0.76669861 -0.2002611 ]
[-0.38026374 0.42007134 -1.08306957]
[ 0.30786828 1.80906798 -0.44145949]]
[[ 0.22965498 -0.23677034 0.24160667]
[ 0.3967085 1.70004822 -0.19343556]
[ 0.18405488 -0.95646895 -0.5863234 ]]]
b=[[ 1.76972539 -0.2757053 0.52658374]
[ 0.63942957 0.42007134 1.80906798]
[ 0.24160667 1.70004822 0.18405488]]
c=[[ True False True]
[ True False True]
[False True False]]
d=[[-1.25508127 1.76972539 0.21302597]
[-0.70784415 0.52658374 -3.04217963]
[ 0.63942957 -0.76669861 -0.2002611 ]
[ 0.30786828 1.80906798 -0.44145949]
[ 0.3967085 1.70004822 -0.19343556]]