tensorflow基本操作

tensor属性:

1,.device(当前tensor在哪个设备上)
2,.gpu/.cpu(对于tensor互换gpu或者cpu)
3,.numpy(把tensor转换成numpy类型)
5,.ndim(判断参数的维度)==.rank(用的少)
6,.is_tensor(判断参数是不是tensor)
7, .dtype(判断类型)
8,.trainable(判断是否可求导)

类型转换:

1,tf.convert_to_tensor(a,dtype=tf.)(数据转换为tensor)
2,tf.cast(a,dtype=tf.)(tf内类型互相转换)
3,tf.Variable(a,name='')
4,int(a)/float(a)标量tensor转换为整型浮点型

创建tensor:

1,  tf.zeros([1,2,3])创建的为维度为1,2,3的值为0的三维tensor//ones等同
2,tf.zeros_like(a)==tf.zeros(a.shape)//ones等同
3,tf.fill([2,2,3],9)初始化维度为2,2,3,每个数字都初始化为9的tensor
4,  tf.random.normal([2,2],mean=1,stddev=1)随机初始化均值为1,方差为1的2维的tensor(不指定的化默认是0,1分布)
5,  tf.random.truncated_normal([2,2],mean=0,stddev=1)截断分布(避免梯度弥散)
6,tf.random.uniform([2,2],maxval=10,dtype=tf.)(创建采样自[0,10)均匀分布的矩阵,类型默认为浮点型)
7,tf.range(1,5,delta=1)(可创建[1,5)之间,步长为1的整型序列

索引与切片:

1,基本索引:a[0][1](取a的tensor的第一维0索引和第二维1索引)(用的很少,不方便)
2,取类似于numpy的索引 a[0,1](和1结果相同)
3,切片a[2:4,5:9]
4,  隔步长采样:start:end:step[1:4:1](1,2,3,4)
5,  逆序采:a[::-1](从最后一个元素采到第一个元素)
6,a=[0,1,2,3] ,a[2::-2](2,0)
7,  ...(好像很牛逼)可以省略任意连续的:(但是:号的位置必须能从逻辑上推断出来)
8,tf.gather(a,axis=0,indices=[2,3])(第一个维度索引第二和第三个)
9,tf.gather_nd(a.shape=[4,35,8];tf.gather_nd(a,[0,1,2])([]);tf.gather_nd(a,[[0,1,2]])([1]))([[]])内层括号为联合索引
10,tf.boolean_mask
	a=tf.ones([2,3,4])
	tf.boolean_mask(a,mask=[[True,False,False],[False,True,True]])(shape=(3,4))

维度变换:

1,tf.reshape:不同view对数据存储是不影响的。
2,tf.transpose(a,perm=[0,1,3,2]):转置(对数据存储有影响)
3,tf.expand_dims(a,axis=0),在0号轴之前位置添加一个维度
4,tf.expand_dims(a,axis=-2),在-2轴之后添加一个维度
5,tf.squeeze(a,axis=-2)去掉当前axis为-2,维度为1的轴,如果不指定axis,则去掉tensor中所有维度为1的轴

数学运算:

1,//整除;  %余除;  tf.math.log()log;  tf.exp()e^x;  tf.math.log(2)/tf.math.log(10)log2以10为底;
2,b**3==tf.pow(b,3)(b的三次方); tf.sqrt(b)(根号下b)
3,  矩阵简单相乘 a@b 
4,矩阵有batch相乘(tf.matmul() 和@都可以)

tensor合并与分割:

1,tf.concat([a,b],axis=0)把a,b的0轴进行拼接
2,  tf.stack([a,b],axis=0)在0轴之前添加一个新的维度
3,tf.unstack(c,axis=0)把0轴拆开分为维度为1的tensor
4,tf.split(c,axis=3,num_or_size_splits=2)若3轴有8个,则分为4,4
	tf.split(c,,axis=3,num_or_size_splits=[2,2,4])按三轴分为2,2,4

tensor的数据统计:

1,tf.norm(a,ord=1,axis=1)在1轴上求第一范式,不设置ord参数的话默认为2范式
2,tf.reduce_min(a,axis=1),在1轴上求最小值,不设定axis的话则认为在全局求最小值
3,tf.argmax(a)返回最大值的位置
4,tf.equal(a,b)逐元素比较
5,tf.reduce_sum(tf.cast(tf.equal(a,b),dtype=tf.int32))确认a,b相等的个数
6,tf.unique(a)返回不重复tensor,并返回重复列表在不重复列表中的位置输入:[4,2,2,4,3],返回:[0,11,0,2]
	还原:tf.gather(unique,idx)
		[4,2,3],[0,11,0,2]([4,2,2,4,3])

tensor排序:

1,tf.sort(a,direction='DESCENDING')返回降序排列后的结果,不写direction参数是默认升序排列
2,tf.argsort(a,direction='DESCENDING')返回降序排列后的位置结果
3,tf.math.top_k(a,2)返回升序排列后的前两个值,对其返回的tuple进行.indices操作可得到排序的索引,.values可得到其排序值

tensor填充与复制:

1,tf.pad(a,[1,2],[2,2])在2维的a上边加一行,下边加两行,左边加两行,右边加两行
2,tf.tile(a,[1,2])表示a的第一个维度不变,第二个维度复制一倍
3,tf.broadcast_to和tf.tile使用方法一致,但是实际上不增加存储,所以推荐使用

tensor限幅:

1,tf.clip_by_value(a,2,8)当a<2时,取2,当a>8时,取8
2,tf.nn.relu(a)=tf.maximum(a,0)
3,  tf.clip_by_norm ()等比例放缩,且不会影响梯度的方向
4,tf.clip_by_global_norm()可以进行多参数的缩放,避免梯度弥散和梯度爆炸

tensor高阶操作:

1,tf.where  a=random.normal([3,3]);mask=a>0;(tf.boolean_mask(a,mask);)==(indices=tf.where(mask);tf.gather_nd(a.indices);)
2,tf.where(mask,a,b)true从a采,false从b采
3,scatter_nd(indices,updates,shape)在全0的shape上更新indices位置为updates)
4,   meshgrid 返回x,y两个tensor存着设定的坐标
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值