TensorFlow2 功能梳理


TensorFlow2 功能总结

通用型功能

数学运算

  • 基本运算 也可用符号直接计算
    tf.add(a,b) 或者 +
    tf.subtract(a,b) 或者 -
    tf.multiply(a,b) 或者 按元素相乘,a,b的形状一致
    tf.divide(a,b) 或者 == /==
    tf.floor_div(a,b) 或者 ==// == 商取整
    tf.mod(b,a) 或者 % 取余

  • 高级运算
    tf.math.log() # 对数,只能以e= 2.71828183为底,其他值可以换算得到
    tf.pow(g, n) # 指数运算
    tf.exp(n) # 自然常数e^n 次幂
    tf.sqrt(f) # 开方
    tf.matmul(a,b)# 矩阵乘法 也可使用 a @ b

  • 特殊功能

    • 求导机制
      - tf.GradientTape() #with tf.GradientTape() as tape,在with里用tf的功能写运算,grads = tape.gradient(loss, variables)会将with的全部计算式进行求导,其中variables可以写为列表形式:[w,b]
      - 更新梯度:optimizer.apply_gradients(grads_and_vars=zip(grads, variables))
      - 学习率更新
      - warmup+余弦退火:#小学习率递增,然后余弦下降
      - tensorflow.keras.backend.get_value(self.model.optimizer.lr) #获取当前优化器的learning_rate
      .set_value(self.model.optimizer.lr,lr) #设置学习率
      - tf.keras.utils.Sequence#on_epoch_end可以实现在每个epoch的结束修改数据集,可以保证每个epoch内部循环全部的样本
      - tf.keras.callbacks.Callback #on_batch_begin( batch, logs=None)、n_batch_end(batch, logs=None)、on_epoch_begin和on_epoch_end 更精准的修改

    • numpy常用功能
      np.expand_dims(ndarray,axis -1) #在ndarray的最右边增加一个维度,通常调整为 [图像数目,长,宽,色彩通道数]

    • 激活函数

      • tf.nn.relu #relu函数 #tf.keras.layers.Dense(units=100, activation=tf.nn.relu)
    • 优化器选择

      • tf.keras.optimizers
        • SGD(learning_rate=1e-3) #SGD随机梯度下降,缺点:鞍点、学习率恒定
        • Adam(learning_rate=1e-3) #【推荐】自动调整学习率,梯度平方加权突破鞍点
        • Adadelta
        • Adagrad
        • RMSprop
    • 损失函数

      • tf.keras.losses

        • MAE # mean_absolute_error 平均绝对误差
        • categorical_crossentropy # 交叉熵,one_hot分类的时候,使用此参数
        • sparse_categorical_crossentropy #交叉熵:计算真实值和预测值的交叉熵 :loss = tf.keras.losses.sparse_categorical_crossentropy(y_true=y, y_pred=y_pred)
          -#对象的功能:sparse_categorical_accuracy.update_state(y_true=y_true_label, y_pred=y_pred)
          #print(“测试准确率: %f” % sparse_categorical_accuracy.result())
      • tf.nn.softmax

    • 模型评估

      • tf.keras.metrics
        • SparseCategoricalAccuracy() # 定义评估函数sparse_categorical_accuracy = tf.keras.metrics.SparseCategoricalAccuracy()
    • 图模式计算加速
      @tf.function #需要将我们希望以 Graph Execution 模式运行的代码封装在一个函数内,并在函数前加上 @tf.function

导入数据集

系统自带数据

	- tf.keras.datasets  #tf.keras.datasets.cifar100.load_data()

数据导入

  • 自定义数据
tf.data.Dataset.from_tensor_slices((X,Y)) #合并特征和目标
tf.keras.preprocessing.image.ImageDataGenerator()  #train_datagen.flow_from_directory('data/train',target_size=(150, 150),batch_size=32,class_mode='binary')
  • 数据集批处理功能
tf.constant() #可以传入list 或者numpy
obj_dataset.map(func)            #其中func(data,label)定义功能时:需要两个输入,但只对data处理
obj_dataset.shuffle(buffer_size) #设置随机缓冲区
obj_dataset.batch(batch_size)    #单次取出数据
obj_dataset.Dataset.prefetch(tf.data.experimental.AUTOTUNE)   #预训练,用AUTOTUNE可自动判断如何分配
obj_dataset.repeat(n)      #重复数据集,n=c重复次数

数据预处理

图像增强

keras.preprocessing.image import 
	Color Jittering:对颜色的数据增强:图像亮度、饱和度、对比度变化
	Random Scale:尺度变换;
	Random Crop:采用随机图像差值方式,对图像进行裁剪、缩放
	Horizontal/Vertical Flip:水平/垂直翻转;
	Shift:平移变换;
	Rotation/Reflection:旋转/仿射变换;
	Noise:高斯噪声、模糊处理

数据归一化

	- 归一化常用参数
		MEAN_RGB = [0.485 * 255, 0.456 * 255, 0.406 * 255]
		STDDEV_RGB = [0.229 * 255, 0.224 * 255, 0.225 * 255]

标签平滑

one_hot编码 tensorflow.keras.utils.to_categorical(labels, num_classes)#labels:一维标签,num_classes:分类个数
系数计算 
	Y *= 1 - smooth_factor  # smooth_factor=0.1, 0*系数不变,1变成0.9
	y += smooth_factor / y.shape[1]# # y.shape = (14802, 40) ,全局加上1/40 = 0.0025

mixup

	- 求出bata分布的随机数 #r = np.random.beta(self.alpha, self.alpha, size),X_r = r.reshape(size, 1, 1, 1)
	- 随意取两张图进行融合 #X = X1 * X_r + X2 * (1 - X_r)

创建模型

自定义创建模型

  • tf.keras.Model #创建模型
    model.summary() #显示模型的结构及信息,model为对象
    tf.keras.models.Sequential([各种层结构]) # 缺点:只能标识通用结构
    tf.keras.Model(inputs=inputs, outputs=outputs) # 优点:可以自定义任意结构。

  • tf.keras.layers #创建各个层模型结构

    • Conv2D #2D卷积层:keras.layers.Conv2D(32, kernel_size=5, strides=1,padding=‘same’, data_format=‘channels_last’, activation=tf.nn.relu)
    • MaxPooling2D #2D池化层; keras.layers.MaxPool2D(pool_size=2, strides=2, padding=‘same’) #池化层的same,当边缘不够一个池化的时候补充0
    • Flatten #多维数据变一维,也可用reshape(-1)。常用在从卷积层到全连接层的过渡。# tf.keras.layers.Reshape(target_shape=(7 * 7 * 64,))
    • Dense #全连接层 :Dense(units,activation=tf.nn.relu,input_shape=())
    • Dropout #Dropout层,
  • 系统自带模型

    • tf.keras.applications
      MobileNetV2(weights=None, classes=5) #classes :分类数。可选:imagenet_utils、inception_resnet_v2、inception_v3、xception、vgg16 等等

    • 迁移学习模型(VGG16举例)

      • 1.读取本地的图片数据以及类别:#keras.preprocessing.image import ImageDataGenerator提供了读取转换功能
      • 2.模型的结构修改(添加我们自定的分类层)#导入部分模型,连接自定义网络结构,通过tf.keras.models.Model(inputs, outputs)封装整个模型
      • 3.freeze掉原始VGG模型 #for layer in self.base_model.layers: layer.trainable = False 通过循环的方式,冻结全部层
      • 4.编译以及训练和保存模型方式
      • 5.输入数据进行预测

模型的训练和评估模型

- model.compile(optimizer,loss=None,metrics=None, 准确率衡) #编译:配置训练相关参数
	- optimizer:梯度下降优化器
	- loss:损失类型
	- metrics=[评价指标]:评价指标

- model.fit() #训练模型
	- 参数:model.fit(train_data, train_label, epochs=num_epochs, batch_size=batch_size,callbacks=[])
	
- model.evaluate(test_images, test_labels) #也可将testset =(test_images, test_labels),传入一个参数

模型的保存和加载

- 保存模型
	- model.save_weights('./checkpoints/my_checkpoint.h5') #h5 可以保存模型和参数
- 定制化模型保存
	- tf.keras.callbacks#需要fit内部加入callbacks回调
		- ModelCheckpoint(filepath, monitor='val_loss', save_best_only=False, save_weights_only=False, mode='auto', period=1)
		- TensorBoard(log_dir='./graph', histogram_freq=1,write_graph=True, write_images=True)  #tensoboard --logdir="./" 打开效果图网页

- 加载模型
	- model.load_weights('./checkpoints/my_checkpoint.h5')
  • 备注:
    完整文档https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image/ImageDataGenerator#view-aliases
    #常用功能:平移,翻转,旋转,
    tf.keras.preprocessing.image.ImageDataGenerator(
    featurewise_center=False, 布尔值,使输入数据集去中心化(均值为0)按feature执行
    samplewise_center=False, 布尔值,使输入数据的每个样本均值为0。
    featurewise_std_normalization=False, 布尔值,将输入除以数据集的标准差以完成标准化,按feature执行。
    samplewise_std_normalization=False, 布尔值,将输入的每个样本除以其自身的标准差。
    zca_whitening=False, 布尔值,对输入数据施加ZCA白化。
    zca_epsilon=1e-06,
    rotation_range=0, 整数,数据提升时图片随机转动的角度。随机选择图片的角度,是一个0180的度数,取值为0180。
    width_shift_range=0.0, 浮点数,图片宽度的某个比例,数据提升时图片随机水平偏移的幅度。
    height_shift_range=0.0, 浮点数,图片高度的某个比例,数据提升时图片随机竖直偏移的幅度。
    brightness_range=None, height_shift_range和width_shift_range是用来指定水平和竖直方向随机移动的程度,这是两个0~1之间的比例。
    shear_range=0.0, 浮点数,剪切强度(逆时针方向的剪切变换角度)。是用来进行剪切变换的程度。
    zoom_range=0.0, 浮点数或形如[lower,upper]的列表,随机缩放的幅度
    channel_shift_range=0.0, 浮点数,随机通道偏移的幅度。
    fill_mode=‘nearest’, ‘constant’,‘nearest’,‘reflect’或‘wrap’之一,当进行变换时超出边界的点将根据本参数给定的方法进行处理
    cval=0.0, 浮点数或整数,当fill_mode=constant时,指定要向超出边界的点填充的值。
    horizontal_flip=False, 布尔值,进行随机水平翻转。随机的对图片进行水平翻转,这个参数适用于水平翻转不影响图片语义的时候。
    vertical_flip=False,布尔值,进行随机竖直翻转。
    rescale=None, 值将在执行其他处理前乘到整个图像上,我们的图像在RGB通道都是0255的整数,这样的操作可能使图像的值过高或过低,所以我们将这个值定为01之间的数。
    preprocessing_function=None,
    data_format=None,
    validation_split=0.0,
    dtype=None)

常用在从卷积层到全连接层的过渡。
train_generator = ImageDataGenerator()
生产图片的批次张量值并且提供数据增强功能
rescale=1.0 / 255,:标准化
zca_whitening=False: # zca白化的作用是针对图片进行PCA降维操作,减少图片的冗余信息
rotation_range=20:默认0, 旋转角度,在这个角度范围随机生成一个值
width_shift_range=0.2,:默认0,水平平移
height_shift_range=0.2:默认0, 垂直平移
shear_range=0.2:# 平移变换
zoom_range=0.2:
horizontal_flip=True:水平翻转

发布了5 篇原创文章 · 获赞 2 · 访问量 100

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览