1、tf.keras.losses.mse 和 tf.keras.losses.MSE ,两者功能相同(书页:61)
2、@ 是矩阵运算乘法(书页:63)
3、为了避免出现像 x[:,:,:,1]这样过多冒号的情况,可以使用 ... 符号表示取多个维度上所有的数据,其中维度的数量需根据规则自动推断:当切片方式出现 ... 符号时,... 符号的左边的维度将自动对齐到最左边,... 符号的右边的维度将自动对齐到最右边(书页:69)
4、给每个层的每个输出节点添加一个偏置,这个偏置数据是对所有的样本都是共享的,换言之每个样本都应该累加上同样的偏置向量 b。(书页:71)
注:偏置向量 b 的元素个数取决于每层输出节点的个数
5、维度变换操作函数:
改变视图:reshape
插入新维度:expands_dims
删除维度:squeeze
交换维度:transpose
复制数据:tile
6、squeeze 删除维度只能删除长度为 1 的维度。可以通过参数 axis 来删除指定的维度,也可以不指定参数 axis ,此时会默认删除所有长度为 1 的维度(书页:75、76)
7、建议使用 tf.squeeze() 时逐一指定需要删除的维度参数,防止 TensorFlow 意外删除某些长度为 1 的维度,导致计算结果不合法(书页:76)
8、交换维度时,不能够使用 reshape 方法,否则将会得到错误的数据(书页:76 的部分内容总结)
9、交换维度时,需要使用 transpose 方法(书页:76)
10、可以通过 tf.tile(x, multiples) 函数完成数据在指定维度上的复制操作,multiples 分别指定了每个维度上面的复制倍数,对应位置为 1 表明不复制,为 2 表明新长度为原来长度的 2 倍,即数据复制一份,以此类推(书页:77)
11、Broadcasting 称为广播机制(或自动扩展机制),它是一种轻量级的张量复制手段,在逻辑上扩展张量数据的形状,但是只会在需要时才会执行实际存储复制操作。对于大部分场景,Broadcasting 机制都能通过优化手段避免实际复制数据而完成逻辑运算,从而相对于 tf.tile 函数,减少了大量计算代价(书页:78、79)
12、建议在运算过程中尽可能地利用 Broadcasting 机制提高计算效率
13、当张量 A 和张量 B 的维度大于 2 时,tensorflow 会选择张量 A 和张量 B 的最后两个维度进行相乘。例如张量 A 的维度是 [4, 3, 28, 32],张量 B 的维度是 [4, 3, 32, 2] 则是选择张量 A 的维度 [28, 32] 和张量 B 的维度 [32, 2] 进行相乘,剩下的 [4, 3] 则当做是 Batch 维度,即数值要相同。
14、拼接操作(tf.concat)直接在现有的维度上合并维度,并不会产生新的维度(例如张量 A 的维度为 [35, 8] 以及张量 B 的维度为 [35, 8] ,在 axis=0 的轴上进行拼接后的维度为 [70, 8])。如果在合并时,希望产生一个新的维度,则需要使用 tf.stack 操作。以前面的例子为例,得到的新的维度是 [2, 35, 8]。
15、通过 tf.split(x, num_or_size_splits, axis)可以完成张量的分割操作。
num_or_size_splits 参数:切割方案。当 num_or_size_splits 为单个数值时,如 10,表示等长切割为 10 份;当 num_or_size_splits 为 List 时,List 的每个元素表示每份的长度,如[2,4,2,2]表示切割为 4 份,每份的长度依次是 2、4、2、2。
return 的数据类型是 List。
切割后,仍会保留原有的维度数量,如原本的维度为 [10, 35, 8],在 axis=0 轴上切割 10 份后,得到的每一份的维度是 [1, 35, 8],而不是 [35, 8]。
网友评论