第5章《TensorFlow进阶》

版本为TensorFlow==2.0.0

5.1合并与分割

5.1.1合并

张量的合并可以通过拼接(Concatenate)和堆叠(Stack)操作实现

1.拼接

tf.concat([a,b],axis=n)合并,其中a,b为合并对象,axis指定合并的维度索引,axis=0表示在第一个维度合并,变成10个[35,8]的矩阵

a=tf.random.normal([4,35,8])
b=tf.random.normal([6,35,8])
tf.concat([a,b],axis=0)

2.堆叠

tf.stack(tensors,axis)合并多个张量,当axis>=0时,在axis之前插入新维度;当axis<0时,在axis之后插入新维度。axis=-1,表示在末尾插入班级维度。

5.1.2分割

tf.split(x,num_or_size_splits,axis)

x=tf.random.normal([10,35,8])
result=tf.split(x,num_or_size_splits=10,axis=0)
len(result)

 进行不等长切割,num_or_size_splits=[4,2,2,2],表示分割的长度依次是4,2,2,2

5.2数据统计

5.2.1向量范数

tf.norm(x,ord)求解张量L1,L2,\propto范式,ord=1,2计算L1,L2,ord=np.inf计算无穷。

5.2.2最值,均值,和

tf.reduce_max(x,axis=1)

tf.reduce_min(x,axis=1)

tf.reduce_mean(x,axis=1)

这些返回的都式标量

求和函数:tf.reduce_sum(x,axis=-1)

#求最后一个维度的和
tf.reduce_sum(out,axis=-1)

选取axis位置上,概率最大的位置

pred=tf.argmax(out,axis=1)

选取axis位置上,概率最小的位置

pred=tf.argmin(out,axis=1)

softmax函数转成概率值

out=tf.nn.sofmax(out,axis=1)

5.3张量比较

#预测与真实值相比,返回布尔类型的张量
tf.equal(pred,y)
#预测与真实值相比,返回布尔类型的张量
tf.math.equal(a,b)

统计True的个数

out=tf.cast(out,dtype=tf.float32)#布尔类型转换成int
correct=tf.reduce_sum(out) #统计True的个数

5.4填充与复制

5.4.1填充(padding)

tf.pad(x,paddings)来填充

5.4.2复制

tf.tile()函数实现长度为1的维度复制的功能。

tf.tile(x,[2,3,3,1])

5.5数据限幅

tf.maximum(x,a)

tf.minimum(x,a)

5.6高级操作

5.6.1 tf.gather

#在班级维度收集第1~2号班级成绩册
tf.gather(x,[0,1],axis=0)

5.6.2 tf.gather_nd

tf.gather_nd(x,[[1,1],[2,2],[3,3]])

5.6.3 tf.boolean_mask

5.6.4 tf.where

5.6.5 scatter_nd

5.6.6 meshgrid

5.7经典数据集加载

5.7.1随机打散

train_db=train_db.shuffle(10000)#随机打散样本,不会打乱样本与标签映射关系

调用Dataset提供的这些工具函数会返回新的Dataset对象,可以通过

db=db.step1().step2().step3()

5.7.2批训练

train_db=train_db.batch(128) #设置批训练,batch size为128

5.7.3预处理

train_db=train_db.map(preprocess)

5.7.4循环训练

for step,(x,y) ub enumerate(train_db): #迭代数据集对象,带step参数

for  x,y in train_db: #迭代数据集对象

多个step完成整个训练集的一次迭代,称为一个Epoch。在实际训练时,通常需要对数据集迭代多个Epoch才能取得较好的训练效果。例如,固定训练20个Epoch,实现如下:

for epoch in range(20):
    for step,(x,y) in enumerate(train_db):
       #training...
      

或者:

traub_db=train_db.repeat(20)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

种豆得瓜er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值