Tensorflow 2.0 学习记录(一)

Tensorflow 2.0基础知识
1.创建Tensor
import tensorflow as tf

tf.constant
tensorflow 支持常见的bool string float double类型数据

#声明一个tf的常量(数)
a = tf.constant(1,dtype=tf.float32)
#声明一个tf的常量(矩阵)
a = tf.constant([1,2],dtype=tf.float32) #[1., 2.]
a = tf.constant([[1],[2]],dtype=tf.float32)#[[1.],[2.]]
#通过dtype指定创建的常量类型(不指定时系统会自动判定)
#常见有tf.double(tf.float64) tf.float16 tf.float32 tf.int16 tf.int32 tf.int36 tf.bool

#将一个Tensor类型转换为一个numpy类型
a.numpy()

tf.convert_to_tensor

#将一个numpy类型转换为一个Tensor类型(dtype指定类型,返回新Tensor)
tf.convert_to_tensor([1,2,3],dtype=tf.float32)#[1,2,3]为一个numpy类型

tf.cast

#转换Tensor类型(通过dtype重新指定类型,返回新Tensor)
tf.cast(a,dtype=tf.float64)

tf.ones

#生成全为1的Tensor shape指定生成的形状(x*y*z的一个矩阵)
a = tf.ones(shape=(x,y,z))
#生成形状与e相同的全为1的Tensor
a = tf.ones_like(e)

tf.zeros

#生成全为0的Tensor shape指定生成的形状(x*y*z的一个矩阵)
a = tf.zeros(shape=(x,y,z))
#生成形状与e相同的全为0的Tensor
a = tf.zeros_like(e)

tf.fill

#用指定变量e填充生成Tensor,shape指定生成的形状(x*y*z的一个矩阵)
tf.fill([x,y,z],e)

tf.range

#生成指定范围的Tensor
tf.range(1,6)
#结果:<tf.Tensor: id=73, shape=(5,), dtype=int32, numpy=array([1, 2, 3, 4, 5])>
tf.range(8)
#结果:<tf.Tensor: id=77, shape=(8,), dtype=int32, numpy=array([0, 1, 2, 3, 4, 5, 6, 7])>

tf.random

#正态分布(均值为v,方差为d)随机初始化一个Tensor,shape指定生成的形状(x*y*z的一个矩阵)
tf.random.normal(shape=(x,y,z),mean=v,stddev=d)
#从截断的正态分布中输出随机值。 shape表示生成张量的维度,mean是均值,stddev是标准差。(一般情况下比normal有着更好性能)
tf.random.truncated_normal(shape=(x,y,z),mean=v,stddev=d)

#均匀分布,shape表示生成张量的维度,minval是最小值,maxval是最大值。
tf.random.uniform(shape=(x,y,z),minval=0,maxval=1)

#随机打散Tensor
#b = [0, 1, 2, 3, 4, 5, 6, 7]
tf.random.shuffle(b)
#结果:<tf.Tensor: id=82, shape=(8,), dtype=int32, numpy=array([6, 7, 3, 0, 1, 2, 4, 5])>

tf.gather

#给定一个位置矩阵b,从a中依此拼接这些位置的点成为一个新的Tensor
#b = [1, 4, 3, 2, 5, 0, 6, 7],a = [11, 22,  5,  6,  1,  4, 44, 47]
tf.gather(a,b)
#结果:[22,  1,  6,  5,  4, 11, 44, 47]

tf.one_hot

#tf.one_hot编码,depth为Tensor宽度
#b = [0, 1, 2]
tf.one_hot(b,depth=2)
"""
结果:<tf.Tensor: id=108, shape=(3, 2), dtype=float32, numpy=
array([[1., 0.],
       [0., 1.],
       [0., 0.]], dtype=float32)>
"""
tf.one_hot(b,depth=4)
"""
结果:<tf.Tensor: id=112, shape=(3, 4), dtype=float32, numpy=
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.]], dtype=float32)>
"""

tf.reduce_mean(均值)

#f = [[1., 2., 3.],
#	  [4., 5., 6.]]
#求整体均值
tf.reduce_mean(f)
#结果:<tf.Tensor: id=126, shape=(), dtype=float32, numpy=3.5>
#求列均值
tf.reduce_mean(f,0)
#结果: <tf.Tensor: id=128, shape=(3,), dtype=float32, numpy=array([2.5, 3.5, 4.5], dtype=float32)>
#求行均值
tf.reduce_mean(f,1)
#结果:<tf.Tensor: id=136, shape=(2,), dtype=float32, numpy=array([2., 5.], dtype=float32)>

tf.keras.losses.mse(均方误差)

#b = [[2., 2.],
#      [2., 2.],
#      [2., 2.]]
#out = [[0., 0.],
#       [0., 0.],
#       [0., 0.]]
tf.keras.losses.mse(out,b)
#结果:<tf.Tensor: id=151, shape=(3,), dtype=float32, numpy=array([4., 4., 4.], dtype=float32)>
2.选着创建Tensor使用的设备
with tf.device("cpu"):
	a.tf.constant([1])
with tf.device("gpu"):
	b.tf.constant([1])
#a创建在cpu上,b创建在gpu上
#注意只用创建在同一设备上时可以进行运算
3.修改查看创建Tensor使用的设备
#可以通过device查看常量的使用的设备
a.device
#'/job:localhost/replica:0/task:0/device:CPU:0'

#可以通过device("gpu") , device("cpu")修改所使用的设备
a.device("gpu")#使用gpu设备
4.查看常量信息
#a 为一个2X1矩阵(Tensor类型):[[1.],[2.]]
a.ndim
#结果:2

tf.rank(a)
#结果:<tf.Tensor: id=18, shape=(), dtype=int32, numpy=2>

#查看Tensor的形状
a.shape
#结果: TensorShape([2, 1])

#判断一个变量是否为Tensor类型
tf.is_tensor(a)
#结果:True

#查看常量类型(可用来判断两个Tensor类型是否相同)
a.dtype
#结果:tf.float32
5. tf.Variablea类型(为神经网络服务)

只有Tensor被声明为Variablea类型,系统才会自动记录梯度信息,才可以对该Tensor自动求导。

# name属性(1.0版本)
b = tf.Variablea(a,name="XXXX")

# 查看当前常量的name
b.name

#查看当前常量是否支持训练(True,False)
b.trainable
6.索引与切片
  • 在TensorFlow 中Tensor的维度为一个一位向量例如:

[1,2,3] 的一个Tensor,它的一个shape属性为[3],是一个长度为3的向量;

[[1,2,3]] 的一个Tensor,它的一个shape属性为[1,3],是一个1*3的矩阵;

[[1,2,3],[1,2,3]] 的一个Tensor,它的一个shape属性为[2,3],是一个长度为2*3的矩阵;

shape返回的结果为该Tensor的维度信息。

  • Tensor支持常见的python风格的数组索引方式,来读取Tensor的每一元素。
a = tf.constant([[1],[2]],dtype=tf.float32)#[[1.],[2.]]
#a[0][0]的值为1.,a[1][0]的值为2.
  • 同时Tensor还有自己的一种读取方法:多维度间可以用""来分割
    例如:a[1][2][3] 等价 a[1,2,3]
  • Tensor支持像python一样的分段读取Tensor内容:
    在这里插入图片描述
  • 多维度,读取某一个维度全部元素时可以省略start与end只写""
    在这里插入图片描述* 每个维度可以使用:start :end :step这种格式来控制起始读取位置(start),终止位置(end),步幅(step,相邻元素的间距,step为负数可起到逆序的功能)
    在这里插入图片描述
    多维度Tensor中"“可以起到省略中间的”:"的作用
    在这里插入图片描述

tf.gather
根据提供的indices(int类型的向量)在axis这个轴上对params进行索引,拼接成一个新的张量

tf.gather(
    params,  # 需要被索引的张量
    indices,  # 索引
    validate_indices=None,
    name=None,
    axis=0
)

在这里插入图片描述
tf.gather_nd
tf.gather_nd类似于tf.gather,不过后者只能在一个维度上进行索引,而前者可以在多个维度上进行索引

tf.gather_nd(
    params, # 待索引输入张量
    indices, # 索引
    name=None
)

在这里插入图片描述
tf.boolean_mask

axis指定提取的维度,mask(为一个bool类型的向量,用True来标记需要提取的元素,False标记舍弃的元素)
在这里插入图片描述

7.维度变换

tf.reshape
改变Tensor的维度(-1由系统自动确定该维度的信息)
在这里插入图片描述
tf.transpose
求Tensor的转置,可以设置perm来设置转置后的维度排列顺序
在这里插入图片描述
tf.expand_dims
扩充Tensor的维度(一次只能增加一个维度),axis指定扩充维度的位置
在这里插入图片描述
tf.squeeze
默认删除所有高度1的维度,axis指定要删除维度(只能指定高度为1的维度)
在这里插入图片描述

8.Broadcasting(广播机制

在这里插入图片描述

9.基本数学运算符号

+ - * / % //
在这里插入图片描述
tf.math.log
功能:tf.math.log(N) = logeN
数学公式:logAN = logeN/logeA

tf.exp
tf.exp(N) = eN
在这里插入图片描述
tf.pow
求解Tensor A 的N次方:tf.pow(A,N)

tf.sqrt
开方Tensor A:tf.sqrt(A)

tf.matmul
矩阵乘法,a与b相乘可表示为 tf.matmul(a,b) = a@b

tf.nn.relu
relu函数,Tensorflow的内建实现方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值