目录
- 导入Tensorflow的库
- 无激活函数 vs 有激活函数?
- 1.无激活函数
- 2.有激活函数
- 无激活函数的神经元-回归/线性模型
- 1.创建训练集散点图
- 2.创建层
- 3.层输入
- 4.获取层参数
- 5.层参数的形状
- 6.手动设置层的参数
- 7.层计算vs线性回归模型计算
- 有激活函数sigmoid的神经元
- 1.创建训练集散点图
- 2.快速创建具备前向传播算法的神经网络模型
- 3.获取模型信息
- 4.获取模型层信息
- 5.神经网络模型计算 vs sigmoid计算
- 总结
导入Tensorflow的库
Tensorflow 是由 Google 开发的机器学习包。2019 年,Google 将 Keras 集成到 Tensorflow 中,并发布了 Tensorflow 2.0。Keras 是由 François Chollet 独立开发的框架,它为 Tensorflow 提供了一个简单的、以层为中心的接口。本课程将使用 Keras 接口。
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.layers import Dense, Input
from tensorflow.keras import Sequential
from tensorflow.keras.losses import MeanSquaredError, BinaryCrossentropy
from tensorflow.keras.activations import sigmoid
from lab_utils_common import dlc
from lab_neurons_utils import plt_prob_1d, sigmoidnp, plt_linear, plt_logistic
plt.style.use('./deeplearning.mplstyle')
import logging
logging.getLogger("tensorflow").setLevel(logging.ERROR)
tf.autograph.set_verbosity(0)
无激活函数 vs 有激活函数?
1.无激活函数
神经元使用线性回归模型,即f(x)=wx+b。
2.有激活函数
神经元使用sigmoid函数,sigmoid函数是激活函数,wx+b不能称为激活函数,它只是用来计算sigmoid中的z。神经元通过sigmoid函数的输出才能被称为神经元的激活项(截止目前的课,神经元都使用逻辑回归模型)。
无激活函数的神经元-回归/线性模型
1.创建训练集散点图
使用第一课时的例子,房价预测,绘制散点图。
2.创建层
参数1:指定神经元数量,餐数2:指定激活函数,此处为线性激活函数。Dense表示全连接层,截止目前我们学习的神经网络都是使用这种类型的层。
3.层输入
-参数必须为二维数组。
4.获取层参数
给层输入,linear_layer就被实例化了,才能够查看层的参数,否则无法查看,此时w,b参数是被自动初始化。
5.层参数的形状
- w:(输入特征的数量,本层神经元数量)。
- b:(本层神经元数量,)。
6.手动设置层的参数
- set_weights设置层的神经元参数w,b。
- 本例中的神经元数量为1,输入的特征数量为1。
7.层计算vs线性回归模型计算
- 使用一个训练样本,可以看到层计算的结果和线性回归模型计算的结果相同。
- 使用全部的训练样本,看到两者计算结果也相同。
有激活函数sigmoid的神经元
1.创建训练集散点图
2.快速创建具备前向传播算法的神经网络模型
- Sequential是构建神经网络模型的一种便捷方式,可以设置多层,并且自动使用前向传播。参数1:指定本层神经元数量。参数2:指定输入样本的特征数。参数3:设置激活函数。参数4:设定层名称。
3.获取模型信息
包含每个层的名称、类型、输出形状和参数数量等。对于快速查看模型结构和参数数量很有用。示例中只有一个神经元和一个特征,因此参数只有一个w和b,因此Param-2。
4.获取模型层信息
5.神经网络模型计算 vs sigmoid计算
-
手动设定wb,带入一个训练样本,两者计算的值是一样的。
-
使用神经网络模型预测,plt_logistic分别展示了模型预测和sigmoid预测的过程。
-
模型的预测
-
sigmoid函数的预测。
-
阴影反应了sigmoid的输出,使用Tensorflow和使用原始的sigmoid预测分类一致。
总结
有激活函数的案例和无激活函数的案例,展示了两种不同的构建一个层的方式,一种是以Dense为主的函数式API形式创建层以及和层的操作,另一种是以Sequential为主的创建一个层的模型,以及通过模型对层的相关操作。