权重初始化
为什么要初始化权重
训练神经网络需要指定权重的初始值,而一个好的初始化方法将有助于网络学习。
好的初始化可以加快梯度下降、模型收敛;减小梯度下降收敛过程中训练和泛化出现误差的几率;
在一个多层的神经网络的正向传播和反向传播中,可知经常会出现连乘的计算,假设激活函数为线性函数,则 y=WnWn−1⋅⋅⋅W2W1xy = W_n W_{n-1}···W_2W_1xy=WnWn−1⋅⋅⋅W2W1x ,当权重 W 小于 1 时,由于连乘可知结果很容易出现指数级减小;当权重 W 大于 1 时,由于连乘可知结果很容易出现指数级爆炸式增长;
梯度消失和梯度爆炸问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。
通过选择好的初始化权重一般可以有效减小这种问题的出现。
初始化权重方法
零初始化(不推荐)
通常,将所有权重初始化为零会导致网络无法打破对称性。
当所有初始值相同时,例如将每个权重初始化为0,然后进行反向传播时,所有权重将具有相同的梯度,因此也将具有相同的更新。这就是所谓的对称性。这意味着所有节点都将学习相同的东西,而我们不希望这样做,因为我们希望网 ...
损失函数
何为损失函数
常见的损失函数
均方差(MSE)损失(Mean Squared Error Loss)
均方差(MSE)损失是机器学习、深度学习回归任务中最常用的一种损失函数,也称为L2 Loss,它是模型预测值 y^\hat yy^ 与真实样本值 yyy 之间差值的平方和。
L2(x)=(y−y^)2L_2(x)=(y-\hat y)^2
L2(x)=(y−y^)2
JMSE=1N∑i=1N(yi−y^i)2J_{MSE}=\frac{1}{N}\sum_{i=1}^{N}(y_i-\hat y_i)^2
JMSE=N1i=1∑N(yi−y^i)2
令 n=1,以y−y^y-\hat yy−y^为横轴,MSE值为纵轴,得函数图形如下:
可见MSE函数曲线光滑连续且处处可导,便于使用梯度下降算法,并且随着误差的减小,梯度也在减小,有利于收敛。
由平方项可知,当 y−y^<1y-\hat y < 1y−y^<1,MSE给予较小的惩罚,缩小误差;当 y−y^>1y-\hat y > 1y−y^>1,MSE给予较大的惩罚,放大误差;可 ...
激活函数
何为激活函数
激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。在神经元中,输入的input经过一系列加权求和后作用于另一个函数,这个函数就是这里的激活函数。
激活函数可以分为线性激活函数(线性方程控制输入到输出的映射,如f(x)=x等)以及非线性激活函数(非线性方程控制输入到输出的映射,比如Sigmoid、Tanh、ReLU、LReLU、PReLU、Swish 等)
因为神经网络中每一层的输入输出都是一个线性求和的过程,下一层的输出只是承接了上一层输入函数的线性变换,所以如果没有激活函数,那么无论你构造的神经网络多么复杂,有多少层,最后的输出都是输入的线性组合,纯粹的线性组合并不能够解决更为复杂的问题。而引入激活函数之后,我们会发现常见的激活函数都是非线性的,因此也会给神经元引入非线性元素,使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中。
为了增强网络的表示能力和学习能力,神经网络的激活函数都是非线性的,通常具有以下几点性质:
连续并可导(允许少数点上不可导),可导的激活函 ...
TensorFlow 笔记2
数据读取处理
1. 文件读取
以下用到的队列都为tf.train.QueueRunner对象,每个 QueueRunner 都负责一个阶段,tf.train.start_queue_runners()函数会要求图中的每个 QueueRunner 启动它的运行队列操作的线程。因此需要在会话中进行线程操作(结束后需回收线程)。
tf.train.Coordinator()线程协调器,通过它来对线程进行管理和协调;创建一个线程协调器对象coord = tf.train.Coordinator(),coord.request_stop():请求停止,coord.join(threads= ):回收线程。
tf.train.start_queue_runners(sess=,coord=)收集图中所有的队列线程,默认同时启动线程。sess:所在的会话,coord:线程协调器。
1.1 构造文件名队列
将需要读取的文件的文件名(一般为相对路径)放入文件队列。
tf.train.string_input_producer(string_tensor,num_epochs=None,shuffle=T ...
TensorFlow 笔记1
Tensorflow的基本结构
tensor(张量):tensorflow的数据中央控制单元 每一个tensor都有一系列的初始值组成,这些初始值形成一个任意维数的数组(一般tensor的列即为它的维度)。flow(流动)。
Tensorflow程序通常有两个阶段:构建图阶段和执行图阶段。
构建图阶段:定义数据(张量[^tensor])与操作(节点[^Op]),这些执行步骤被描述成一个图。
执行图阶段:使用会话(Session)执行构建好的图中的操作。
123456789101112131415161718import tensorflow as tfnode1 = tf.constant(3.0)node2 = tf.constant(4.0)node3 = tf.add(node1,node2)print(node1) # Tensor("Const:0", shape=(), dtype=float32)print(node2) # Tensor("Const_1:0", shape=(), dtype=float32)print(node ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick Start
Create a new post
1$ hexo new "My New Post"
More info: Writing
Run server
1$ hexo server
More info: Server
Generate static files
1$ hexo generate
More info: Generating
Deploy to remote sites
1$ hexo deploy
More info: Deployment