欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

06 tensorflow 快速搭建动态模型

程序员文章站 2024-03-11 16:40:43
...

通过模型类的方式编写一个线性模型,输出结果为函数 y = a * x + b 中的a和b。

开始之前先介绍一些内容:

  1. 在 TensorFlow 中,推荐使用 Keras( tf.keras )构建模型。Keras 是一个广为流行的高级神经网络 API,简单、快速而不失灵活性。
  2. Keras 有两个重要的概念: 模型(Model) 和 层(Layer) 。层将各种计算流程和变量进行了封装,而模型则将各种层进行组织和连接,并封装成一个整体,描述了如何将输入数据通过各种层以及运算而得到输出。
  3. 可以通过继承 tf.keras.Model 这个 Python 类来定义自己的模型。在自定义中,我们需要重写 init() (构造函数,初始化)和 call(input) (模型调用)两个方法,同时也可以根据需要增加自定义的方法。
  4. 全连接层 (tf.keras.layers.Dense)是 Keras 中最基础和常用的层之一,对输入矩阵 A 进行 f(AW + b) 的线性变换和**函数操作。如果不指定**函数,即是纯粹的线性变换 AW + b。W(kernel)和 b(bias) 是层中可训练的变量。

开始

  1. 导入库

     import tensorflow as tf
    
  2. 创建张量x和y

    x = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
    y = tf.constant([[10.0], [20.0]])
    
  3. 自定义线性模型

    class Liner(tf.keras.Model):
        def __init__(self):
            super().__init__()
            self.dense = tf.keras.layers.Dense(
                units=1,  # 神经元个数
                activation=None,  # **函数
                kernel_initializer=tf.zeros_initializer(),  # 初始化 kernel
                bias_initializer=tf.zeros_initializer()  # 初始化 bias
            )
    
        def call(self, input):
            output = self.dense(input)
            return output
    
  4. 实例化模型

    model = Liner()
    
  5. 定义优化器

    optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)
    
  6. 梯度下降(训练)

    for i in range(100):
        with tf.GradientTape() as tape:
            y_pred = model(x)
            loss = tf.reduce_mean(tf.square(y_pred - y))
        grads = tape.gradient(loss, model.variables)
        optimizer.apply_gradients(grads_and_vars=zip(grads, model.variables))
    
  7. 输出结果

    print(model.variables)
    

最终结果

[<tf.Variable 'liner/dense/kernel:0' shape=(3, 1) dtype=float32, numpy=
array([[0.40784496],
       [1.191065  ],
       [1.9742855 ]], dtype=float32)>,
<tf.Variable 'liner/dense/bias:0' shape=(1,) dtype=float32, numpy=array([0.78322077], dtype=float32)>]