数据类型
tensorflow中数据类型
tensorflow中可创建多种类型的变量,有int,float,double,bool,string
tensorflow的属性
注:在tensorflow2.0中,不需要name属性,是之前版本遗留问题;在tf2.0中,常使用shape属性查看参数
tensorflow中判断数据的类型
tensorflow中转换数据类型
tf.Variable
注:Variable是表示哪些变量需要求梯度
将tensor转换为numpy类型
调用numpy属性或者直接使用int(tensor)转换
创建tensor
从numpy,list数据转换
使用tf.convert_to_tensor
使用tf.zeros
使用tf.zeros_like
创建一个shape和传入的tensor变量一致的,内容全为0的tensor
使用tf.ones
类似tf.zeros,创建一个全为1的tensor
使用tf.fill
创建一个全为指定数值的tensor
使用Normal
tf.random.normal会创建一个指定shape,指定均值方差,分布为正态分布的随机tensor变量。
若不指定均值方差,默认为N(0, 1)
tf.random.truncated_normal会将正态分布范围裁剪一部分,裁剪两边远离峰值部分,以免出现梯度离散
使用uniform
指定shape,min~max范围的均匀分布的随机初始化tensor
随机打散
使用tf.constant
tensorflow中的类型样式
标量scalar
loss,accuracy
vector
bias
matrix
weight
tensor
注:在tensorflow中,vector、matrix其实都可视为tensor
索引和切片
索引
tensor和numpy类似
注:…表示全部选择,在…前面的从前往后取,在…后面的从后往前取
切片
使用tf.gather
可指定维度,并可在指定维度上选择特定的数据,并按照一定的顺序排列
使用tf.gather_nd
注:若直接取某一学生的成绩,是标量;需要再额外加一层方括号转变为tensor
使用tf.boolean_mask
维度变换
reshape
注:使用-1,是将tensor除指定维度之外的所有维度自动计算,并合并为一个维度
tf.transpose
增减维度
expand_dims
squeeze
注:若不指定轴,将tensor中等于1的维度全部去除;指定轴时,若等于1,去除,若不等于1,不变
Broadcasting
前提条件
tf.broadcast_to
如果两个tensor直接计算,会隐式调用tf.broadcast_to,也可自己显示调用
broadcast vs tile
tf.tile后面跟着的是复制次数
注:broadcast它并没有真正的复制,占用内存空间小;tile确实进行了复制,占用内存空间大。常使用broadcast
数学运算
基本运算
log exp
log2,log10
平方 开方
矩阵相乘
3维及以上矩阵相乘
最后两维进行矩阵相乘,前面的维度需保持一致
复合运算
合并与分割
concat
注:使用时除指定维度,其它维度需要保持一致
stack
stack会创建一个新的维度
注:所有维度需要保持一致
unstack
注:在unstack的轴上,有几个就分为几个,见split
split
数据统计
范数
tf.norm
reduce_min/max/mean
argmax/argmin
tf.equal
组合运用,求accuracy
tf.unique
张量排序
sort、argsort
top_k
top_k Accuracy
填充与复制
pad
pad中方括号中的参数说明:第一个方括号代表在第一个维度进行填充,第一个数字表示在之前添加多少行,第二个数字代表在之后添加多少行;第二个方括号代表在第二个维度进行填充,第一个数字表示在之前添加多少列,第二个数字代表在之后添加多少列
vs tile
tile是在方括号对应的维度上复制的次数
张量限幅
根据value限幅
relu
根据norm限幅
根据gradient限幅
高阶特性
where
注:where(cond, A, B),true,取A的值;false,取B的值
scatter_nd
meshgrid linspace
数据加载
tf.data.Dataset
map
map可传入一个函数进行预处理
repeat
example
全连接层
sequential
输出方式
MSE
sigmoid
将其转到0~1之间
softmax
转换到0~1之间,并且和为1
tanh
误差计算
MSE
Entropy
cross entropy
cross entropy常用于分类问题
使用cross entropy的一些注意事项
在cross entropy中默认包含了softmax
梯度下降
若想要求导的某个参数不是Variable类型,可使用tape.watch
求二阶导数
tensorboard可视化
Step1.run listen
Step2.build summary
Step3.fed scalar
如果需要显示图片,前两部步不变
显示单张图片
如果需要显示多张图片,需要我们自己将多张图片合并为一张图片,如果直接使用tensorflow自带的api,会出现以下现象
合并后
Keras高层API
Metrics
compile fit
compile
之前
之后
可将求导过程加入其中
fit
之前
之后
fit的参数中validation_step应该改为validation_freq,表示训练多少个epoch就进行一次测试
evaluate
自定义网络
模型保存与加载
save_weights只保存参数,使用load_weights加载时,需要重新重建模型
使用save保存时,会将参数和模型全部保存,使用load导入时,可以直接导入
一种工业常用的模型保存方法
saved_model不仅是一个函数,还是一种协议。使用这种方法可以使模型能够被其它语言使用,更加通用
过拟合和欠拟合
交叉验证
tensorflow中也有简便的方法调用
regularization
如何添加
添加方法一:
添加方法二:
动量与学习率
动量
有些优化器已经将动量考虑在内了,不需要我们设置,如:Adam优化器
学习率衰减
一些其它训练trick
early stopping
防止过拟合
dropout
注:在训练时,network应设置training为True;测试时,network应设置training为False
卷积神经网络
注:在tensorflow中,image的tensor顺序是[b, h, w, c]
layer.Conv2D
nn.conv2d
卷积神经网络的梯度
池化与采样
上采样
BatchNorm
Batch Norm是在channel上进行的,即不同图片的同一通道进行batch norm
训练参数:β和γ
BatchNormalization不写参数默认axis=-1,center=True,scale=True,trainable=True
运用于image
Forward
Backward
ResNet
RNN Layer使用
Single layer RNN Cell
Multi-Layers RNN
RNN Layer
通过指定units实现转换
LSTM
LSTM cell
LSTM Layer
GRU
GRU cell
GRU Layer