1)数据拼接打散
Tensorflow学习--高阶操作
stack用来处理相同名下的拼接,创建一个新的维度来区分
a.shape = [4,35,8]
b.shape = [4,35,8]
Tensorflow学习--高阶操作
concat()要求只有一个维度不同,在这个维度上拼接
stack()要求所有维度都相同,这里axis=3表示在第三个维度前插入新维度
关于axis的理解:不要用行列来理解,容易混乱,一般来说0表示第一个维度,1表示第二个维度,2表示第三个维度这样Tensorflow学习--高阶操作
tf.split(c,axis = 3,num_or_size_splits = 2) c.shape = [2,4,35,8]
split()不是像unstack单纯的在哪个维度打散就分多少个,如在c的第3个维度打散,就会分为8个[2,4,35],通过num_or_size_splits参数控制要打散多少份,参数后接列表还可以控制每份多少个如:num_or_size_splits=[2,2,4]就把第3个维度分3份,224

**2)
Tensorflow学习--高阶操作
tf.norm(x,ord=2) ord参数控制选择哪一种范数默认L2 2范数:平方和开根 等价 tf.sqrt(tf.reduce_sum(tf.square(a)))

reduce_min/max/mean(axis=1):axis参数可以查看每个维度上的min/max/mean
tf.argmax(a,axis = 1):返回最大值的位置
tf.cast(data,dtype = int32):数据类型转换
tf.equal(y,pred)
准确率计算
tf.reduce_sum(tf.cast(tf.equal(y,pred),dtype=tf.int32)) / 样本总数

tf.unique(a) 去除重复

a=tf.sort(a,direction = ‘DESCENDING’) 降序排序
idx=tf.argsort(a,direction = ‘DESCENDING’) 排序结果在原序列中的位置
tf.gather(a,idx)

找到前几个最大或最小TOP_K
Tensorflow学习--高阶操作
Tensorflow学习--高阶操作
数据扩充
tf.pad(data,[[0,0],[2,2],[1,1]]):数据填充,默认0.这里在第一维的最前和最后都没有填充,在第二维的最前填充2行,最后填充两行,在第三位最前填充一行,最后填充一行
tf.tile(a,[1,2]):行为1不扩充,列为2扩充一次。列的方向吧原数据完整复制一份

数据限制
tf.maximum(a,2) 限定最小值为2,小于2的都变为2 定下限
tf.minimum(a,8) 限定最大值为8,大于8的都变为8 定上限
max(0,x) if x<0 , res = 0 ;else x
min(0,x) if x>0, res = 0 ;else x

minimum(8,maximum(x,2)) 限定数据在2-8
tf.nn.relu(a) == tf.maximum(a,0)

Gradient Exploding or Vanishing
梯度爆炸:步长太长,导致在极小值附件来回震荡但始终走不到极小值。返回值为none
tf.clip_by_norm(a,15):吧a的L2距离改为15,实际上改变了值,使得L2为15。一种数据缩放
new_grads,total_norm = tf.clip_by_global_norm(grads,25) :方向不会改变,等比例缩放,可用于解决梯度爆炸

获取矩阵中的需要的值,如:
1.step :mask = data > 0 获得a中大于0的mask矩阵
2.step:tf.boolean_mask(a,mask) 获得a中大于0的值(返回a中对应maks中为True的值)

数据更新
scatter_nd(indices,updates,shape)shape是原数据,updates是用来更新的数据,indices是位置,对应shape的位,
把updates的数据按indices指示的位置一个个更新到shape中

points_x,point_y = tf.meshgrid(x,y)
从数组x和y中产生网格。把坐标存储在两个Tensor中,point_x和point_y

相关文章: