TensorFlow 2.0实战

1. 工具

1.1 TensorFlow模型格式

文件格式 扩展名 说明
CheckPoint *.ckpt 1) 在训练 TensorFlow 模型时,每迭代若干轮需要保存一次 权值到磁盘,称为“checkpoint”
2) 这种格式文件是由 tf.train.Saver() 对象调用 saver.save() 生成的
3) 只包含若干 Variables 对象序列化后的数据,不包含图结构,所以只给 checkpoint 模型不提供代码是无法重新构建计算图的
GraphDef *.pb
*.pbtxt
*.meta
1) 这种格式文件包含 protobuf 对象序列化后的数据,包含了计算图,可以从中得到所有(运算符operators)的细节,也包含张量(tensors) Variables 定义
2) 但不包含 Variable 的值(不含权值),因此只能从中恢复计算图,但一些训练的权值仍需要从 checkpoint 中恢复
3) .pb 为二进制文件,实际上 protobuf 也支持文本格式(.pbtxt),但包含权值时文本格式会占用大量磁盘空间,一般不用
SavedModel 图:.pb或.pbtxt 1) 该格式为 GraphDef 和 CheckPoint 的结合体,另外还有标记模型输入和输出参数的 SignatureDef
2) 从 SavedModel 中可以提取 GraphDef 和 CheckPoint 对象
3) 在使用 TensorFlow Serving 时,会用到这种格式的模型
4) 其中 saved_model.pb(或 saved_model.pbtxt)包含使用 MetaGraphDef protobuf 对象定义的计算图;assets 包含附加文件;variables 目录包含 tf.train.Saver() 对象调用 save() API 生成的文件
TensorFlow Lite model *tflite
*lite
1) 轻量级模型格式
  • 使用方法
    • 部署在线服务(Serving)时官方推荐使用 SavedModel 格式
    • 部署到手机等移动端的模型一般使用 FrozenGraphDef 格式(最近推出的 TensorFlow Lite 也有专门的轻量级模型格式 *.lite,和 FrozenGraphDef 十分类似)
    • 这些格式之间关系密切,可以使用 TensorFlow 提供的 API 来互相转换。

1.2 MediaPipe

2. 常用激活函数

3. tf.keras

3.1 创建学习模型

3.1.1 Sequential (顺序模型)

  • 由多个网络层线性堆叠
  • Load dataset (准备数据)
# TensorFlow and tf.keras
import tensorflow as tf
from tensorflow import keras

# Load dataset
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
               'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

# Preprocess the data
train_images = train_images / 255.0
test_images = test_images / 255.0
  • Build the model (创建层并加入到model)
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28,28)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])
  • Compile the model (配置模型训练过程)
    • Loss function(损失函数):在训练期间,用于衡量模块的准确性,使用模型朝着此损失最小化的方向前进
    • Optimizer(优化方法):定义基于模型看到的数据及其损失函数来更新模型的方式
    • Metrics(指标):用于监视训练和测试过程的指标
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
  • Train the mode(训练模型)
model.fit(train_images, train_labels, epochs=10)
  • Evaluate accuracy (评估准确性)
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
  • Make predictions (预测数据类别)
predictions = model.predict(test_images)
print("\n The first test image:", predictions[0])
print("The fist test image label:", test_labels[0])

plt.figure()
plt.imshow(test_images[0])
plt.colorbar()
plt.grid(False)
plt.show()

3.1.2 Functional (函数模型)

  • 允许构建任意的神经网络图

3.2 网络层

3.2.1 tf.keras.layers.Flatten

  • 功能:把二维图像变为一维数组 (按行转换为一维数组)
  • 此层无学习参数,只是重新组织数据
  • 示例:
import tensorflow as tf
from tensorflow import keras
layer = keras.layers.Flatten(input_shape=(28, 28))

3.2.2 tf.keras.layers.Dense

  • 功能:全连接层, output = activation(dot(input, kernel) + bias)
    • kernel: 是本层待学习的权重矩阵参数
    • bias:是本层待学习的偏移向量
  • 参数
    • units: 定义本层输出的节点数(nodes)或神经元数(neurons)
    • activation: 定义本层的激活函数 ,若不指定,则为:a(X) = X
    • use_bias: Boolean, 定义本层使用使用偏移量
    • kernel_initializer: 待学习的权重矩阵的初始化方法(字符串)
    • bias_initializer: 待学习的偏移向量的初始化方法(字符串)
    • kernel_regularizer: 应用于权重矩阵的正则化函数
    • bias_regularizer: 应用于偏移向量的正则化函数
    • activity_regularizer: 应用于输出层 (its “activation”)的正则化函数
    • kernel_constraint:应用于权重矩阵的约束函数
    • bias_constraint: 应用于偏移向量的约束函数
  • 默认初始值
def __init__(self,
             units,
             activation=None,
             use_bias=True,
             kernel_initializer='glorot_uniform',
             bias_initializer='zeros',
             kernel_regularizer=None,
             bias_regularizer=None,
             activity_regularizer=None,
             kernel_constraint=None,
             bias_constraint=None,
             **kwargs):
    if 'input_shape' not in kwargs and 'input_dim' in kwargs:
      kwargs['input_shape'] = (kwargs.pop('input_dim'),)

    super(Dense, self).__init__(
        activity_regularizer=regularizers.get(activity_regularizer), **kwargs)
    self.units = int(units)
    self.activation = activations.get(activation)
    self.use_bias = use_bias
    self.kernel_initializer = initializers.get(kernel_initializer)
    self.bias_initializer = initializers.get(bias_initializer)
    self.kernel_regularizer = regularizers.get(kernel_regularizer)
    self.bias_regularizer = regularizers.get(bias_regularizer)
    self.kernel_constraint = constraints.get(kernel_constraint)
    self.bias_constraint = constraints.get(bias_constraint)

    self.supports_masking = True
    self.input_spec = InputSpec(min_ndim=2)
发布了349 篇原创文章 · 获赞 1093 · 访问量 502万+
展开阅读全文

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

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览