Tensorflow学习笔记--张量与会话

张量

张量是Tensorflow的核心组件之一,可以理解为Tensorflow就是张量和流组成的,张量可以简单地理解为多维数组,我的理解就是张量是一个数据模板,深度学习所有数据首先转换为张量的格式再进行计算,然后得到学习结果。
横向看张量是整形、浮点型的数,另外注意张量计算中,有些计算需要张量数据的类型相同,否则会报错。纵向看张量是不同维度的“数组”,零阶张量是一个数,是计算的最小单元;二阶张量是向量,由多个数组成的一维数组;n阶张量可以理解为n维数组,但注意张量不是数组,张量只保存了如何得到这种数据的计算过程,只是一个架子,真正的数据需要数据流来填充。

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()   #将tf2.0版本退回到tf1.x版本
import numpy as np
a = tf.constant([1.0,2.0])
b = tf.constant([3.0,4.0])
c = tf.add(a,b)
print(c)
#输出为:Tensor("Add:0", shape=(2,), dtype=float32)

注意:
1、我电脑是2.x版本的,之后要用到1.x版本的,所以要将2.x退回到1.x版本。本来这里是不需要这样的,但我怕一些小伙伴遇到和我一样的问题,所以说一下。现在网上资料还是1.x版本的居多
2、tf.constant()是创建了张量,张量与张量计算得到的还是张量,所以输出是张量的形式,要得到具体的数据输出,需要创建会话,因为说了张量是一个架子,创建会话运行了数据才有具体数值(我的理解)
下面介绍张量的几种形式:
1、固定张量
全零张量,全一张量,指定数据填充张量,自定义张量

zero_x = tf.zeros([3,2])   #三行两列全0
one_y = tf.ones([2,3])  #两行三列全1
fill_z = tf.fill([3,3],2)   #三行三列全2
a = tf.constant([1.0,2.0]) #自定义张量

2、相似形状张量
创建与某个张量相似形状的全0、全1张量

zero_similar = tf.zeros_like(fill_z) #与fill_z形状一样的全0张量
one_similar = tf.ones_like(fill_z)#与fill_z形状一样的全1张量

3、序列张量
创建指定间隔或范围的张量

linear_tensor = tf.linspace(start=1,stop=3,num=6) #1~3之间均匀间隔的取6个数,前后都闭
#[1.  1.4 1.8 2.2 2.6 3. ]
sequence_tensor = tf.range(start=0,limit=100,delta=20)#0~100之间以20为间隔取值,注意前闭后开
#[ 0 20 40 60 80]

4、随机张量
均匀分布、正态分布以及打乱顺序操作

rand_tensor = tf.random.uniform([3,3],minval=2,maxval=8) #2~8均匀分布
trun_tensor = tf.random.normal([3,4],mean=0,stddev=5) #均值为0,标准差为5的正态分布
print(sess.run(rand_tensor))
print(sess.run(trun_tensor))
x_tensor = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]
sh_tensor = tf.random.shuffle(x_tensor)#打乱第一维度
print(sess.run(sh_tensor))
输出结果如下:
# [[5.065407  2.0050747 7.6943893]
#  [5.1341724 5.7074695 7.7371235]
#  [4.2609234 2.656004  3.784842 ]]
# [[ -1.4331696    5.929882     2.695279    -3.8469646 ]
#  [ -0.67223096 -11.099451    -6.8680725   -2.2905774 ]
#  [ -0.51417214  -8.1686325   -0.6630664    5.973238  ]]
# [[ 6  7  8  9 10]
#  [ 1  2  3  4  5]
#  [11 12 13 14 15]]

注意:打乱函数的打乱是第一维度

会话

如果把创建张量比作构建话务系统,那么会话就是开始打电话。这也是Tensorflow的思想,先构件图,再在图中流动数据,不过在2.x版本,就不需要创建会话了,这里只简单提一下。
创建会话的一般形式:

import tensorflow as tf 
sess = tf.Session()#创建会话
sess.run(...) #使用会话开始运算并得到结果
sess.close() #关闭会话并释放运行资源

这种方式会话结束需要close,有事程序运行异常资源就回收不了,会导致资源泄露,于是更多的是使用Python上下文管理器来使用会话。

with tf.Session() as sess:
    sess.run(...)

另外,创建会话后,输出的张量就是具体的数值了,因为有数据的流动,有具体数据结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值