【TensorFlow】笔记:基础知识-使用keras建立线性回归
点击上方“公众号”可订阅哦!
Keras 模型以类的形式呈现,我们可以通过继承 tf.keras.layers.Layer
这个 Python 类来定义自己的模型。在继承类中,我们需要重写 __init__()
(构造函数,初始化)和 call(input)
(模型调用)两个方法,同时也可以根据需要增加自定义的方法。
01
keras模型类定义示意
继承 tf.keras.Model
后,我们同时可以使用父类的若干方法和属性,例如在实例化类 model = Model()
后,可以通过 model.variables
这一属性直接获得模型中的所有变量,免去我们一个个显式指定变量的麻烦。
使用模型类编写线性模型
import tensorflow as tf
X = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
y = tf.constant([[10.0], [20.0]])
class Linear(tf.keras.Model):
def __init__(self):
super().__init__()
self.dense = tf.keras.layers.Dense(
units=1,
activation=None,
kernel_initializer=tf.zeros_initializer(),
bias_initializer=tf.zeros_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
这一线性变换,而是建立了一个继承了 tf.keras.Model
的模型类 Linear
。这个类在初始化部分实例化了一个 全连接层( tf.keras.layers.Dense
),并在 call 方法中对这个层进行调用,实现了线性变换的计算。
02
全连接层
全连接层 (Fully-connected Layer,tf.keras.layers.Dense )是 Keras 中最基础和常用的层之一,对输入矩阵 进行 的线性变换 + 激活函数操作。如果不指定激活函数,即是纯粹的线性变换 。具体而言,给定输入张量 input = [batch_size, input_dim] ,该层对输入张量首先进行 tf.matmul(input, kernel) + bias 的线性变换( kernel 和 bias 是层中可训练的变量),然后对线性变换后张量的每个元素通过激活函数 activation ,从而输出形状为 [batch_size, units] 的二维张量。
units:输出张量的维度
activation:激活函数,常用激活函数tf.nn.relu 、 tf.nn.tanh 和 tf.nn.sigmoid
use_bias:是否加入偏置向量bias
kernel_initializer 、 bias_initializer:权重矩阵 kernel 和偏置向量 bias 两个变量的初始化器
END
深度学习入门笔记
微信号:sdxx_rmbj
日常更新学习笔记、论文简述