TensorFlow学习笔记之三(神经网络的优化)
文章目录
- 1. 使用激活函数去线性化(为什么要用激活函数)
- 实验证明线性模型的局限性
- 常用激活函数
- 2. 神经网络复杂度:用网络层数和网络参数的个数表示
- 3. 损失函数(loss):预测值(y)与已知答案(y_)的差距
- 均方误差mse
- 交叉熵ce(Cross Entropy):表征两个概率分布之间的距离
- 4. softmax()函数:让n分类问题的n个输出(y1,y2, ...yn)满足概率分布
- 5. 学习率(learning_rate):决定每次参数更新的幅度
- 6. 滑动平均
- 7. 正则化
1. 使用激活函数去线性化(为什么要用激活函数)
TensorFlow游乐场:http://playground.tensorflow.org
对于上一篇的网络TensorFlow笔记之二可以抽象为如下形式,
[y]=[a1,1a1,2a1,3]∗[w1,1(2)w2,1(2)w2,1(2)]=[x1x2]∗[w1,1(1)w1,2(1)w1,3(1)w2,1(1)w2,2(1)w2,3(1)]∗[w1,1(2)w2,1(2)w2,1(2)]\begin{gathered} \begin{bmatrix} y \end{bmatrix} \end{gathered}=\begin{gathered} \begin{bmatrix} a_{1,1} & a_{1,2} & a_{1,3} \end{bmatrix} \end{gathered} *\begin{gathered} \begin{bmatrix} w^{(2)}_{1,1}\\w^{(2)}_{2,1}\\w^{(2)}_{2,1} \end{bmatrix} \end{gathered}= \begin{gathered} \begin{bmatrix} x_{1} & x_{2} \end{bmatrix} \end{gathered} *\begin{gathered} \begin{bmatrix} w^{(1)}_{1,1} & w^{(1)}_{1,2} & w^{(1)}_{1,3} \\ w^{(1)}_{2,1} & w^{(1)}_{2,2} & w^{(1)}_{2,3} \end{bmatrix} \end{gathered}* \begin{gathered} \begin{bmatrix} w^{(2)}_{1,1}\\w^{(2)}_{2,1}\\w^{(2)}_{2,1} \end{bmatrix} \end{gathered} [y]=[a1,1a1,2a1,3]∗⎣⎢⎡w1,1(2)w2,1(2)w2,1(2)⎦⎥⎤=[x1x2]∗[w1,1(1)w2,1(1)w1,2(1)w2,2(1)w1,3(1)w2,3(1)]∗⎣⎢⎡w1,1(2)w2,1(2)w2,1(2)⎦⎥⎤
其中,令:
W′=W(1)W(2)=[w1,1(1)w1,2(1)w1,3(1)w2,1(1)w2,2(1)w2,3(1)]∗[w1,1(2)w2,1(2)w2,1(2)]=[w1′w2′]W^{'}=W^{(1)}W^{(2)}= \begin{gathered} \begin{bmatrix} w^{(1)}_{1,1} & w^{(1)}_{1,2} & w^{(1)}_{1,3} \\ w^{(1)}_{2,1} & w^{(1)}_{2,2} & w^{(1)}_{2,3} \end{bmatrix} \end{gathered}* \begin{gathered} \begin{bmatrix} w^{(2)}_{1,1}\\w^{(2)}_{2,1}\\w^{(2)}_{2,1} \end{bmatrix} \end{gathered}= \begin{gathered} \begin{bmatrix} w^{'}_{1}\\w^{'}_{2} \end{bmatrix} \end{gathered} W′=W(1)W(2)=[w1,1(1)w2,1(1)w1,2(1)w2,2(1)w1,3(1)w2,3(1)]∗⎣⎢⎡w1,1(2)w2,1(2)w2,1(2)⎦⎥⎤=[w1′w2′]
这样,就可以得出
[y]=[x1x2]∗[w1′w2′]=w1′x1+w2′x2\begin{gathered} \begin{bmatrix} y \end{bmatrix} \end{gathered}= \begin{gathered} \begin{bmatrix} x_{1} & x_{2} \end{bmatrix} \end{gathered} * \begin{gathered} \begin{bmatrix} w^{'}_{1}\\w^{'}_{2} \end{bmatrix} \end{gathered}=w^{'}_{1}x_{1}+w^{'}_{2}x_{2} [y]=[x1x2]∗[w1′w2′]=w1′x1+w2′x2
可以看出,该网络虽然有两层,但是它在本质上与单层神经网络没有区别,因为它可以被一个单层网络表示。由此可以推断,如果只是每个神经元只是单纯的线性变换,多层的全连接网络与单层的全连接网络的表达能力没有区别(通过矩阵运算,最终都会变成一个矩阵)。它们最终都是y是关于x1和x2的一个线性模型,而且线性模型解决问题的能力是有限的,这就是线性模型的最大局限性。
实验证明线性模型的局限性
本次实验在TensorFlow游乐场中进行。
情景模拟:现在根据x1(零件长度与平均长度的差)和x2(零件质量与平均质量的差)来判断一个零件是否合格(二分类问题)。因此,当一个零件的长度和质量越接近平均值(x1和x2接近零),那么这个零件越可能合格。那么它可能呈现如下分布
图中蓝色的点代表合格的零件(x1和x2接近零)。黄色的点代表不合格的(x1或x2偏大)。
将激活函数选择线性模型。训练100轮后
发现并不能很好的将零件区分开来。
将激活函数选择ReLu,训练100轮。
可以发现模型很好的将零件区分开来了。
常用激活函数
2. 神经网络复杂度:用网络层数和网络参数的个数表示
由于输入层只接受数据,不做计算故输入层不算层数。
3. 损失函数(loss):预测值(y)与已知答案(y_)的差距
网络优化目标:loss最小。
常用loss:
- mse(Mean Squared Error) 均方误差
- 自定义
- ce(Cross Entropy)交叉熵
均方误差mse
当预测值(y)与已知答案(y_)越接近
–>均方误差MSE(y_, y)越接近0
–>损失函数的值越小
–模型预测效果越好
预测酸奶模型
# 预测import tensorflow as tf
import numpy as npBATCH_SIZE = 8
seed = 23455# 基于seed产生随机数
rng = np.random.RandomState(seed=seed)
X = rng.rand(32, 2)
Y_ = [[x1+x2+(rng.rand()/10.0-0.05)] for (x1, x2) in X]
Y = [[int(x0 + x1 <1)] for (x0, x1) in X]# 1、定义神经网络的输入、参数和输出,定义前向传播过程
x = tf.placeholder(tf.float32,shape=(None, 2)) # 知道每组有两个特征变量,但是不知道多少组,用None占位
y_ = tf.placeholder(tf.float32,shape=(None, 1)) # 存放真实的结果值,合格为1,w1 = tf.Variable(tf.random_normal([2, 1], stddev=1, seed=1))y = tf.matmul(x, w1)# 2、定义损失函数以及反向传播方法
loss = tf.reduce_mean(tf.square(y-y_)) # 使用均方误差计算loss
train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss) # 学习率为0.001,并让损失函数让减小的方向优化# 3、生成会话,训练STEPS轮
with tf.Session() as sess:# 3.1、初始化参数值init_op = tf.global_variables_initializer()sess.run(init_op)print("w1:\n", sess.run(w1))print("\n")# 3.2、训练模型STEPS = 30000for i in range(STEPS):# 3.2.1 每轮确定读取数据集的游标start = (i*BATCH_SIZE) % 32end = start + BATCH_SIZE# 3.2.2 喂入数据,开始训练sess.run(train_step, feed_dict={x: X[start:end], y_: Y_[start:end]})# 3.2.3 每500轮输出一次loss值if i % 500 == 0:print("每500轮输出一次w1的值\n")print(sess.run(w1), "\n")total_loss = sess.run(loss, feed_dict={x: X, y_: Y})print("After % dtraining step(s), cross entropy on all data is % g" % (i, total_loss))print("w1:\n", sess.run(w1))
交叉熵ce(Cross Entropy):表征两个概率分布之间的距离
H(y,y)=−Σy−∗logyH(y_,y) = -Σy_-*log y H(y,y)=−Σy−∗logy
4. softmax()函数:让n分类问题的n个输出(y1,y2, …yn)满足概率分布
∀xP(X=x)∈[0,1]且∑xP(X=x)=1softmax(y[]){\forall}x P(X = x) \in [0,1] 且 \sum_{x} P(X = x) =1 softmax(y[]) ∀xP(X=x)∈[0,1]且x∑P(X=x)=1softmax(y[])
前面已经讲过,损失函数是用来衡量模型预测值与真实值之间的差值。即模型好坏的标准。一个模型越好,它的损失函数越小。因此,
神经网络的优化=减小损失函数
5. 学习率(learning_rate):决定每次参数更新的幅度
wn+1=wn−learningratew_{n+1}=w_{n}-learning_rate wn+1=wn−learningrate
6. 滑动平均
滑动平均(影子值):记录了每个参数一段时间内过往值得平均,增加了模型的泛化性。
针对所有的参数:w和b(类似给参数加了影子,参数变化,影子缓慢追随)
影子初始值=参数初始值
影子(滑动平均值) = 衰减率 * 影子 + (1-衰减率)* 参数
衰减率 = min{MOVING_AVERAGE_DECAY, (1+轮数)/(10+轮数)}
栗子:
MOVING_AVERAGE_DECAY(超参数:训练之前设置的参数)为0.99,
参数w1初始值为0
w1的滑动平均初始值为0
轮数global_step=0
w1 = 1
w1滑动平均值 = 0
衰减率 = min(0.99, 1/10)=0.1
w1滑动平均值 = 0.1 * 0 +(1-0.1) *1 = 0.9
所以,第0轮过后,w1的滑动平均值更新为0.9
global_step=100
w1 = 10
w1滑动平均值 = 0.9
衰减率 = min(0.99, 101/110)=0.918
w1滑动平均值 = 0.918 * 0.9 +(1-0.918) *10 = 0.8262 + 0.82 = 1.6482(误差由于四舍五入引起)
7. 正则化
正则化的意义是为了防止过拟合。
TensorFlow学习笔记之三(神经网络的优化)相关推荐
- TensorFlow学习笔记——深层神经网络
引言 TensorFlow 版本1.15pip3 install tensorflow==1.15.0. 这是<TensorFlow实战Google深度学习框架(第2版)>的学习笔记,所有 ...
- 莫烦大大TensorFlow学习笔记(8)----优化器
一.TensorFlow中的优化器 tf.train.GradientDescentOptimizer:梯度下降算法 tf.train.AdadeltaOptimizer tf.train.Adagr ...
- Tensorflow学习笔记——搭建神经网络
目录 1.搭建神经网络6步法 2.函数用法和介绍 (1)tf.keras.models.Sequential() (2)Model.compile() (3)model.fit() (4)model. ...
- tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数
tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报 分类: tensorflow(4) 目录(?)[+] 本笔记目的 ...
- tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)
续集请点击我:tensorflow学习笔记--使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...
- TensorFlow学习笔记--第三节张量(tensor)及其定义方法
目录 在TensorFlow中,所有的数据通过张量的形式来表示 1张量及属性: 1.1维数(阶) 1.2 形状 1.3数据类型 TensorFlow 支持以下三种类型的张量: **1.常量** **2 ...
- tensorflow学习笔记(八):LSTM手写体(MNIST)识别
文章目录 一.LSTM简介 二.主要函数 三.LSTM手写体(MNIST)识别 1.MNIST数据集简介 2.网络描述 3.项目实战 一.LSTM简介 LSTM是一种特殊的RNN,很好的解决了RNN中 ...
- tensorflow学习笔记(十):GAN生成手写体数字(MNIST)
文章目录 一.GAN原理 二.项目实战 2.1 项目背景 2.2 网络描述 2.3 项目实战 一.GAN原理 生成对抗网络简称GAN,是由两个网络组成的,一个生成器网络和一个判别器网络.这两个网络可以 ...
- Tensorflow学习笔记-过度拟合问题
Tensorflow学习笔记-过度拟合问题 神经网络在训练是,并不是希望模型尽量模拟训练的数据,而是希望模型对未来的数据具有准确的判断.因此,模型在训练数据上的表现并不代表对未来数据的表现.如果模型可 ...
最新文章
- 01.移动先行之谁主沉浮----我的第一个程序
- sitecore系统教程之架构概述
- 第一阶段:Java基础之数组
- windows7计算机管理,win7系统打开计算机管理(compmgmt.msc)的操作方法
- 003 python接口 cookies
- RPC规范接口实现模块Flask-JSONRPC
- Message Queue
- matlab哪些教材好,新手入门,恳请推荐一本matlab好教材
- HDU3579 Hello Kiki(CRT非互质)
- Pack up your loved ones 带上至亲至爱
- CAD文件怎么转成图片?手机也能轻松解决
- linux下brctl配置网桥
- Python批量转换文件夹下图片为PDF
- 浅析2022年6月六级翻译真题
- python里面pop,remove和del 三者的用法区别
- 清华老师终于把微服务讲清楚了
- 红米适配鸿蒙os,体验亮点满满!鸿蒙OS系统6月份开启适配,不只有华为手机
- 0096 克鲁斯卡尔算法,迪杰斯特拉算法
- scrollTo与scrollBy用法以及TouchSlop与VelocityTracker解析
- 直播卫星免费面临的困局
热门文章
- python 中间一列左对齐_Python|fstring我喜欢Python的原因之一
- 用c++来开发php的底层模块|用c++来开发apache模块,Apache模块开发实例(2)
- python dicom 器官分割_图像识别 | 使用Python对医学Dicom文件的预处理(含代码)
- 博士申请 | 南洋理工大学骆思强老师招收大数据/机器学习方向博士生、博士后...
- 全网首个OpenPrompt尝鲜报告:Prompt研究者必备实验利器
- EMNLP 2021 | PairSupCon:基于实例对比学习的句子表示方法
- 清华大学高阳:Mastering Atari Games with Limited Data
- 理论+技术+代码已经准备完毕!2021年啃透花书!
- 探究Softmax的替代品:exp(x)的偶次泰勒展开式总是正的
- 如何高效准备2021届秋招算法岗面试?