【TensorFlow】笔记:基础知识-使用keras建立线性回归

共 2032字,需浏览 5分钟

 ·

2021-02-14 23:03

点击上方“公众号”可订阅哦!



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

日常更新学习笔记、论文简述

浏览 39
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报