06 tensorflow 快速搭建动态模型
程序员文章站
2024-03-11 16:40:43
...
通过模型类的方式编写一个线性模型,输出结果为函数 y = a * x + b 中的a和b。
开始之前先介绍一些内容:
- 在 TensorFlow 中,推荐使用 Keras( tf.keras )构建模型。Keras 是一个广为流行的高级神经网络 API,简单、快速而不失灵活性。
- Keras 有两个重要的概念: 模型(Model) 和 层(Layer) 。层将各种计算流程和变量进行了封装,而模型则将各种层进行组织和连接,并封装成一个整体,描述了如何将输入数据通过各种层以及运算而得到输出。
- 可以通过继承 tf.keras.Model 这个 Python 类来定义自己的模型。在自定义中,我们需要重写 init() (构造函数,初始化)和 call(input) (模型调用)两个方法,同时也可以根据需要增加自定义的方法。
- 全连接层 (tf.keras.layers.Dense)是 Keras 中最基础和常用的层之一,对输入矩阵 A 进行 f(AW + b) 的线性变换和**函数操作。如果不指定**函数,即是纯粹的线性变换 AW + b。W(kernel)和 b(bias) 是层中可训练的变量。
开始
-
导入库
import tensorflow as tf
-
创建张量x和y
x = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]) y = tf.constant([[10.0], [20.0]])
-
自定义线性模型
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
-
实例化模型
model = Liner()
-
定义优化器
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)
-
梯度下降(训练)
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))
-
输出结果
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)>]