tensorflow进阶总结

tensorflow进阶总结

      • 数据的合并与分割
      • 数据统计
      • 张量的比较
      • 填充
      • 数据限幅
      • 高级操作
      • tip:

数据的合并与分割

tf.concat([a,b],axis=n)#拼接:不会会产生新的维度
'''
e.g.:
	a.shape = [4,32,8]
	b.shape = [6,32,8]
	axis = 0
	=> concat.shape = [10,32,8]
'''
#约束:非拼接维度之间必须保持一致,否则拼接不合法。


tf.stack([a,b],axis=n)#堆叠:产生新的维度
'''
e.g.:
	a.shape = [32,8]
	b.shape = [32,8]
	axis = 0
	=> stack.shape = [2,32,8]
'''
#约束:所有待合并的shape完全一致,否则非法。


tf.split(x,num_or_size_splits,axis)#分割:将一个张量拆分为多个张量
'''
	x -> 待分割张量
	num_or_size_splits -> 切割方案:为单个数值时:表示切割为等长的n份。当为List时:表示每份的长度
	axis -> 分割的维度索引号
'''
'''
e.g.:
	a.shape = [10,20,30]
	return = tf.split(a,num_or_size_splits=10,axis=0)
	return为len为10 的张量列表
	return[0].shape = [1,20,30] 注意:切割后任然并保留了维度(维度为1)
'''
#特别的,如果希望某个维度全部分割的长度都为1:tf.unstack(x,axis),但被切割的维度会消失,如[20,30]。

数据统计

#范数:具体的计算请自查
tf.norm(x,ord = n) #n =1/2/np.inf,分别代表1范数 2范数 无穷范数


#最值、均值、和
#可计算某个维度的,也可计算全局的
tf.reduce_max(a,axis = n)
tf.reduce_min(a,axis = n)
'''
e.g.:
	a.shape = [4,10]
	retuen = tf.reduce_max(a,axis = 2)
	return.shape = [4,]
'''

#当不指定axis时,会计算全局的元素对应的数据
tf.reduce.mean(a,axis = n)#均值
tf.reduce.sum(a,axis = n)#求和
tf,argmax(a , axis = n)#最大值索引号
tf,argmin(a , axis = n)#最小值索引号

#tip: tf.nn.softmax(out,axis=n)输出转化为概率

张量的比较

#两张量是否一致
tf.equal(x,y)#返回布尔值类型的张量:每个元素一一对应
#[True,Flase,Flase,....]

tensorflow进阶总结_第1张图片

填充

#填充(padding)一般为了保持两张量维度一致,进行一些无意义的填充,填充0,
tf.padding(b,padding)#padding参数包含多个嵌套方案的List,如[[0,0],[1,1],[1,2]]表示在第一维度不填充,第二维左侧填充1个单元,在第二维度右侧填充1个单元,在第三个维度左侧填充1个单元,右侧填充2个单元
'''
e.g.: 
	a = [1,2,3,4,5,6]
	b = [1,2,3,4]
	return = tf.padding(b,[[0,2]])
    return = [1,2,3,4,0,0]
'''
#一般用于自然语言处理,对于不同单词数的句子,对他们的张量长度进行统一,然后进行堆叠操作。
#也可用在图片填充当中

数据限幅

tf.maximum(x,2)#x在[2,+inf)区间上
tf.minimum(x,0)#(-inf,0]
tf.minimum(tf.maximum(x,2),7)#[2,7]

#更方便的
tf.clip_by_value(x,2,7)#[2,7]

高级操作

tf.gather(x,[a,b],axis = n)#根据索引号取出数据
#表示在维度为n上取出a到b上的数据(维度从1开始,实际上axis从0开始)
'''
e.g.:
	a.shape = [4,5,6]
	r = tf.gather(a,[0,1],axis = 0)
	r.shape = [2,5,6]
'''
#事实上切片也可以实现,不过较为麻烦,gather适合索引号没有规则的场景
tf.gather.nd(x,[[],[],[]])#通过指定坐标,同时采样多个点并且进行堆叠操作
tf.boolean_mask(a,mask,axis)#通过指定维度,以掩码的方式采样数据
'''
e.g.: 
	a.shape = [4,32,8]
	r = tf.boolean_mask(a,mask=[True,False,False,True],axis=0)
	r.shape = [2,32,8]
'''
#注意:掩码长度必须与对应的维度长度一致
#掩码方式与gather_nd方式可以相互转换
tf.where(cond,a,b)#根据条件cond的真假,conda=True -> a , conda=False - > b
#当a,b不指定时,函数返回cond张量中所有为True的元素的索引坐标
tf.where(cond)
tf.scatter_nd(indices,updates,shape)#将数据update按照索引indices的位置,刷新到形如shape的白板中

indices = tf.constant([[4],[3],[1],[7]])
updates = tf.constant([4.4,3.3,1.1,5.5])
r = tf.scatter_nd(indices,updates,[8])
out : r.numpy() = array([0.,1.1,0.,3.3,4.4,0.,0.,5.5]) 
tf.linespace(star,end,num)#在(star--end)区间内等间隔的生成num个数字,注意这里的star和end必须是浮点型
tf.meshgrid(a,b)#通过a的数据点,和b的数据点,返回a*b个数据点的张量[a,b,2],并切割为2个张量[a,b]、[a,b]
#功能就是 根据a和b生成网格点,用于绘制3D视图,可视化。
'''
e.g.:
	a = tf.linspace(-8,8,100)
	b = tf.linspace(-8,8,100)
	print(a.shape,b.shape)
	out: (100,)
	
	x,y = tf.meshgrid(a,b)
	print(x.shape,y.shape)
	out: (100, 100) (100, 100) 
'''

tip:

keras.datesets模块提供经典数据集的自动下载,管理、加载、转换等功能。通过datesets.xxx.load_data()函数进行自动加载,所有数据都是用Numpy数组保存。通过Dateset.from_tensor_slices可以将训练部分的数据图片x和标签y转化成dataset对象

Dataset.shuffle(buffer_size)可将Dataset对象随机打散数据顺序。buffer_size表缓冲池,一般一个较大的常数。

xxx.batch(size)批训练,数量为size

xxx.map(func) 预处理,自定义func函数,传入即可。

for step,(x,y) in enumerate(train_db)

for x,y in train_db

你可能感兴趣的:(Tensorflow2,学习笔记,python,tensorflow)