Tensorflow学习笔记:模型建立与训练篇

2023-06-1108:18:31人工智能与大数据Comments2,240 views字数 2704阅读模式

一. Python 函数装饰器

装饰器:修改其他函数的功能的函数文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html

def hello(a_func()):
    def first():
        print("hello,")
        a_func()
        print("my friend!")
    return first

def name():
    print("Penny,")

name = hello(name)

可以创建嵌套的函数文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html

在将函数作为参数返回的时候:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html

  • 若把一对小括号放在函数名后面,这个函数就会执行
  • 若不放括号在函数名后面,那它函数名可以被到处传递,并且可以赋值给别的变量而不去执行函数

@:一个简短的方式来生成一个被装饰的函数[1]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html

@hello
def name():
    print("Penny,")

二. 模型(Model)与层(Layer)

TensorFlow 中,推荐使用 Keras(tf.keras)构建模型文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html

Keras 是一个广为流行的高级神经网络 API,简单、快速而不失灵活性,现已得到 TensorFlow 的官方内置和全面支持。[2]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html

模型和层是Keras里两个重要的概念:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html

  • 层:封装各种计算流程和变量
  • 模型:将各种层进行组织和连接,并封装成一个整体

使用 y_pred = model(x) 的形式进行模型调用,tf.keras.layers 内置了深度学习中大量常用的的预定义层文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html

Keras 模型以类的形式呈现,通过继承 tf.keras.Model 这个类来定义模型;继承类的时候,需要重写_init_() 和 call(input) 两个方法,也可自己添加方法[2]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html

class MyModel(tf.keras.Model):
    def __init__(self):
        super().__init__()     # Python 2 下使用 super(MyModel, self).__init__()
        # 此处添加初始化代码(包含 call 方法中会用到的层),例如
        # layer1 = tf.keras.layers.BuiltInLayer(...)
        # layer2 = MyCustomLayer(...)

    def call(self, input):
        # 此处添加模型调用的代码(处理输入并返回输出),例如
        # x = layer1(input)
        # output = layer2(x)
        return output

    # 还可以添加自定义的方法
Tensorflow学习笔记:模型建立与训练篇

Keras 模型类定义示意图 - https://tf.wiki/zh_hans/basic/models.html文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html

继承tf.keras.Model后,可以调用父类的方法和属性,通过 model.variables 可直接获得模型中的所有变量文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html

class Linear(tf.keras.Model):     # 建立了一个继承了 tf.keras.Model 的模型类 Linear 
    def __init__(self):
        super().__init__()
        self.dense = tf.keras.layers.Dense(     # 实例化了一个 全连接层
            units=1,     # 输出张量的维度
            activation=None,     # 激活函数,默认为无激活函数 a(x) = x
            kernel_initializer=tf.zeros_initializer(),     # 权重矩阵kernel的初始化器,默认为tf.glorot_uniform_initializer
            bias_initializer=tf.zeros_initializer()     # 偏置向量bias的初始化器,默认为tf.glorot_uniform_initializer
        )

    def call(self, input):     # 对 全连接层 进行调用,实现了线性变换的计算
        output = self.dense(input)
        return output

model = Linear()
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)
for i in range(100):
    with tf.GradientTape() as tape:
        y_pred = model(X)      # 调用模型 y_pred = model(X) 而不是显式写出 y_pred = a * X + b
        loss = tf.reduce_mean(tf.square(y_pred - y))
    grads = tape.gradient(loss, model.variables)    # 使用 model.variables 这一属性直接获得模型中的所有变量
    optimizer.apply_gradients(grads_and_vars=zip(grads, model.variables))
print(model.variables)

可以看出,并不需要显式地声明a和b,也不需要声明线性变换 y_pred=a*X+b文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html

全连接层 tf.keras.layers.Dense :对输入矩阵进行线性变换 + 激活函数操作文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html

  • 给定输入张量 input=[batch_size,input_dim] ,先进行 tf.matmul(input,kernel)+bias 的线性变换,再将线性变换后张量的每个元素通过激活函数 activation,得到二维张量[batch_size,units]
  • 常用的激活函数包括 tf.nn.relu 、 tf.nn.tanh 和 tf.nn.sigmoid
  • 如果不指定激活函数,即是纯粹的线性变换
  • use_bias:是否加入偏置向量,默认为True
  • tf.zeros_initializer 表示将变量初始化为全 0
  • kernel=[input_dim,units] 和 bias=[units] 为两个可训练变量

三. 示例:多层感知机(MLP)

1. 使用 tf.keras.datasets 获得数据集并预处理
2. 使用 tf.keras.Model 和 tf.keras.layers 构建模型
3. 构建模型训练流程,使用 tf.keras.losses 计算损失函数,并使用 tf.keras.optimizer 优化模型
4. 构建模型评估流程,使用 tf.keras.metrics 计算评估指标[2]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html

(未完待续)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html

参考

  1. ^Python 函数装饰器 https://www.runoob.com/w3cnote/python-func-decorators.html
  2. ^abcTensorFlow 模型建立与训练 https://tf.wiki/zh_hans/basic/models.html

参考

  1. ^Python 函数装饰器 https://www.runoob.com/w3cnote/python-func-decorators.html
  2. ^abcTensorFlow 模型建立与训练 https://tf.wiki/zh_hans/basic/models.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/46864.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ai/46864.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定