1.Tensorflow基础

1.Tensorflow基础

关于Tensorflow

TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。

数据流图

数据流图用“结点”(nodes)和“线”(edges)的有向图来描述数学计算。“节点” 一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)。张量从图中流过的直观图像是这个工具取名为“Tensorflow”的原因。一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行运算。

介绍

list 可支持一维的各种数据类型
np.array 可支持多维同类型的数据,但是没有GPU的支持,也不支持自动求导等数学问题。
tf.Tensor 连续数据

Tensor

scalar(标量):1.2 一个标准的标量
vector(向量):[1.1],[1,2,3,4]
matrix(矩阵):[ [1,2,3],[4,5,6] ]

tensor:原先值 rank(等级) >2,现指所有的数据类型

Tensorflow(科学计算库)基本数据类型

int,float,double,bool,string,tf.constant(1.1) 创建一个常量

Tensor属性

a.devce返回变量a所在设备的名称(字符串类型),即是在GUP还是CPU上
aa=a.gpu() 将a所在的设备转换成GPU上
bb=b.cpu() 将b所在的设备装换成CPU上
在计算数据时,变量所在的设备要一致,不然会报错

a.dtype 返回数据的类型
a.shape 返回数据的形状
a.ndim 返回数据的维度

tf.rank(a) 返回Tensorflow张量a的秩

判读是不是tensor类型的方法

isinstance(a, tf.Tensor) #多数情况下可用
tf.is_tensor(a) #推荐使用

转换

a.dtype == tf.float32 判断a的类型是不是float类型
1,tf.convert_to_tensor(value,dtyoe=None);转换换成tensor类型
可以转换各种python类型对象,numpy数组,python列表参数,

In [3]: import tensorflow as tf
In [8]: import numpy as np
In [4]: import os
In [11]: os.environ['TF_CPP_LOG_MIN_LEVEL']='2'  #禁止警告提示

In [9]: a=np.array(5)
In [10]: aa =tf.convert_to_tensor(a)
In [12]: bb=tf.convert_to_tensor(a,dtype=tf.float32)  #支持类型的转换

In [13]: aa
Out[13]: <tf.Tensor: id=0, shape=(), dtype=int32, numpy=5>

In [14]: bb
Out[14]: <tf.Tensor: id=1, shape=(), dtype=float32, numpy=5.0>

2,tf.cast(value,dtype):数据格式的转换

In [16]: tf.cast(aa,dtype=tf.float32)
Out[16]: <tf.Tensor: id=2, shape=(), dtype=float32, numpy=5.0>

In [17]: tf.cast(aa,dtype=tf.double)
Out[17]: <tf.Tensor: id=3, shape=(), dtype=float64, numpy=5.0>

# 整形转换成bool类型
In [18]: b=tf.constant([0,1])

In [22]: bb=tf.cast(b,dtype=tf.bool)
In [23]: bb
Out[23]: <tf.Tensor: id=7, shape=(2,), dtype=bool, numpy=array([False,  True])>
In [25]: tf.cast(bb,dtype=tf.int32)  #bool转int
Out[25]: <tf.Tensor: id=8, shape=(2,), dtype=int32, numpy=array([0, 1])>

3,tf.Variable 包装变量,使其具有一些特性(专门为神经网络所设)可对变量进行算术,如可求导
就像任何Tensor(张量)一样,使用Variable()创建的变量可以用作图中其他操作的输入

In [26]: a=tf.range(5)  #创建

In [27]: a
Out[27]: <tf.Tensor: id=12, shape=(5,), dtype=int32, numpy=array([0, 1, 2, 3, 4])>

In [28]: b=tf.Variable(a,name='input_data')   #包装,可以添加name 

In [29]: b.name 
Out[29]: 'input_data:0'

In [30]: b.trainable      #表示是否可训练
Out[30]: True

# 被包装后
In [31]: isinstance(b,tf.Variable)     
Out[31]: True

In [32]: isinstance(b,tf.Tensor)     #出现问题
Out[32]: False

In [33]: tf.is_tensor(b)   #正确,判断是否为Tensor尽量用tf.is_tensor()
Out[33]: True
创建Tensor

1,from Numpy,List

In [35]: tf.convert_to_tensor(np.ones([2,3]))
Out[35]:
<tf.Tensor: id=20, shape=(2, 3), dtype=float64, numpy=
array([[1., 1., 1.],
       [1., 1., 1.]])>

In [36]: tf.convert_to_tensor(np.zeros([2,3]))
Out[36]:
<tf.Tensor: id=21, shape=(2, 3), dtype=float64, numpy=
array([[0., 0., 0.],
       [0., 0., 0.]])>
       
In [38]: tf.convert_to_tensor([1,2])    #列表
Out[38]: <tf.Tensor: id=22, shape=(2,), dtype=int32, numpy=array([1, 2])>

In [39]: tf.convert_to_tensor([1,2.])     #自动变成浮点型
Out[39]: <tf.Tensor: id=23, shape=(2,), dtype=float32, numpy=array([1., 2.], dtype=float32)>

In [40]: tf.convert_to_tensor([[1,2.],[1,2]])
Out[40]:
<tf.Tensor: id=24, shape=(2, 2), dtype=float32, numpy=
array([[1., 2.],
       [1., 2.]], dtype=float32)>

2,tf.zeros(shape,dtype=tf.float32,name=None)创建一个类型为dtype的张量,形状为shape,所有的元素都为零,
tensorflow的dtype类型:tf.int32, tf.float32, tf.float64, tf.bool, tf.string

In [41]: tf.zeros([])
Out[41]: <tf.Tensor: id=25, shape=(), dtype=float32, numpy=0.0>

In [42]: tf.zeros([1])
Out[42]: <tf.Tensor: id=28, shape=(1,), dtype=float32, numpy=array([0.], dtype=float32)>

In [43]: tf.zeros([2,3])
Out[43]:
<tf.Tensor: id=31, shape=(2, 3), dtype=float32, numpy=
array([[0., 0., 0.],
       [0., 0., 0.]], dtype=float32)>

In [45]: tf.zeros([3,2,2])
Out[45]:
<tf.Tensor: id=37, shape=(3, 2, 2), dtype=float32, numpy=
array([[[0., 0.],
        [0., 0.]],
        
       [[0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.]]], dtype=float32)>

In [46]: tf.zeros([2,3],dtype=tf.int32)
Out[46]:
<tf.Tensor: id=40, shape=(2, 3), dtype=int32, numpy=
array([[0, 0, 0],
       [0, 0, 0]])>

3,tf.zeros_like(tensor,dtype=None) 创建一个所有元素都设置为零的张量
给定一个张量(tensor),该操作返回与所有元素设置为零的tensor具有相同类型和形状的张量,或者,也可使用dtype指定返回张量的新类型

In [47]: a=tf.zeros([2,3,4])

In [48]: tf.zeros_like(a)   #等同于tf.zeros(a.shape)
Out[48]:
<tf.Tensor: id=44, shape=(2, 3, 4), dtype=float32, numpy=
array([[[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]],

       [[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]]], dtype=float32)>
        
In [50]: tf.zeros_like(a,dtype=tf.int32)
Out[50]:
<tf.Tensor: id=47, shape=(2, 3, 4), dtype=int32, numpy=
array([[[0, 0, 0, 0],
        [0, 0, 0, 0],
        [0, 0, 0, 0]],

       [[0, 0, 0, 0],
        [0, 0, 0, 0],
        [0, 0, 0, 0]]])>

4,tf.ones(shape,dtype=tf.float32)创建一个将所有元素都设置为1的张量
这个操作返回一个dtype类型的张量,并且形状为shape,所以元素都被设置为1

In [52]: tf.ones([])    #标量
Out[52]: <tf.Tensor: id=48, shape=(), dtype=float32, numpy=1.0>

In [53]: tf.ones([1])
Out[53]: <tf.Tensor: id=51, shape=(1,), dtype=float32, numpy=array([1.], dtype=float32)>

In [54]:

In [54]: tf.ones([2,2])
Out[54]:
<tf.Tensor: id=54, shape=(2, 2), dtype=float32, numpy=
array([[1., 1.],
       [1., 1.]], dtype=float32)>

tf.ones_like(tensor,dtype=None) 与tf.zeros_like类似
创建一个将所有元素都设置为1的张量

5,利用标量值填充TensorFlow张量
tf.fill(dims,value) 创建一个填充了标量值的张量
该操作创建一个形状dims的张量,并将值(value)填充其中
返回张量的类型与value具有相同的类型

In [56]: tf.fill([2,3],0)   # 2*3的全0 张量
Out[56]:
<tf.Tensor: id=60, shape=(2, 3), dtype=int32, numpy=
array([[0, 0, 0],
       [0, 0, 0]])>

相当于np.full

6,Normal随机初始化
tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.tloat32,seed=None) 正太分布
mean:正态分布的均值,默认为0.0
stddev:正态分布的标准差,默认为1.0
seed:一个python整数,用于为分发创建一个随机种子,设置后每次生成的随机数都一样

In [57]: tf.random.normal([2,2])
Out[57]:
<tf.Tensor: id=66, shape=(2, 2), dtype=float32, numpy=
array([[-2.0627532 , -0.48125386],
       [-0.7270144 ,  0.41614422]], dtype=float32)>

In [58]: tf.random.normal([2,2],mean=1,stddev=2)
Out[58]:
<tf.Tensor: id=72, shape=(2, 2), dtype=float32, numpy=
array([[-0.42468727, -3.429366  ],
       [ 0.3059216 ,  0.3949545 ]], dtype=float32)>

tf.random.truncated_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32.seed=None)
从截断的正态分布中输出随机值
生成的值遵循具有指定均值和标准差的正态分布,不同之处在于其平均值大于2个标准差的值将被丢弃并重新选择即范围为 [ mean - 2 * stddev, mean + 2 * stddev ] 。用于提升性能,缩小范围

In [59]: tf.random.truncated_normal([2,2])
Out[59]:
<tf.Tensor: id=78, shape=(2, 2), dtype=float32, numpy=
array([[ 0.21286643,  0.1667896 ],
       [-0.29199   , -0.80637115]], dtype=float32)>

7,Uniform随机均匀分布
tf.random.unifrom(shape,minval=0,maxval=None,dtype=tf.float32,seed=None)
从均匀分布中输出随机数
生产的值在该 [ minval, maxval)范围内遵循均匀分布
对于浮点数,默认范围是 [ 0, 1 )

In [61]: tf.random.uniform([2,2])
Out[61]:
<tf.Tensor: id=85, shape=(2, 2), dtype=float32, numpy=
array([[0.53005064, 0.93355775],
       [0.8443105 , 0.3429159 ]], dtype=float32)>

In [62]: tf.random.uniform([2,2],minval=1,maxval=5)
Out[62]:
<tf.Tensor: id=92, shape=(2, 2), dtype=float32, numpy=
array([[1.0178642, 2.2819552],
       [2.2837105, 1.1925797]], dtype=float32)>

8,Random Permutation 随机打散
tf.random.shuffle(value,seed=None)
value: 将被打乱的张量
随机地将张量沿着第一维度打乱
张良沿着维度0被重新打乱,使得每个value[j]被映射到唯一一个output[i]

In [64]: idx=tf.range(10)

In [65]: tf.random.shuffle(idx)
Out[65]: <tf.Tensor: id=97, shape=(10,), dtype=int32, numpy=array([4, 5, 1, 8, 0, 6, 2, 3, 7, 9])>

In [66]: idx
Out[66]: <tf.Tensor: id=96, shape=(10,), dtype=int32, numpy=array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>

9,tf.constant(value,dtype=None,shape=None)
创建一个常量tensor,按照给出的value来赋值,可以用shape来指定形状,value可以是一个数,也可以是一个list;
如果是一个数,那么这个常量中的所有值都是按该数来赋值
如果是list,(因为版本的原因,这里强调的比较严苛)那么len(value)的值一定等于shape的乘积个数

In [79]: tf.constant([])
Out[79]: <tf.Tensor: id=118, shape=(0,), dtype=float32, numpy=array([], dtype=float32)>

In [80]: tf.constant([1])
Out[80]: <tf.Tensor: id=119, shape=(1,), dtype=int32, numpy=array([1])>

In [81]: tf.constant([[1,2,3]])
Out[81]: <tf.Tensor: id=120, shape=(1, 3), dtype=int32, numpy=array([[1, 2, 3]])>

In [82]: tf.constant([1,2,3,4,5,6],shape=[2,3])
Out[82]:
<tf.Tensor: id=123, shape=(2, 3), dtype=int32, numpy=
array([[1, 2, 3],
       [4, 5, 6]])>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值