MiniFlow
文章平均质量分 56
xf8964
这个作者很懒,什么都没留下…
展开
-
MiniFlow -- 12.SGD Solution
这里使用波士顿房价完成一个完整的机器学习这里添加一个梯度下降函数def sgd_update(trainables, learning_rate=1e-2): """ Updates the value of each trainable with SGD. Arguments: `trainables`: A list of `Input` Nodes representing weights/biases.原创 2021-06-20 20:27:47 · 176 阅读 · 0 评论 -
MiniFlow -- 10.简单的实现梯度下降
这里我们加入学习率来实现一下简单的梯度下降我们假设输出方程为二次方程y = x**2 +5def f(x): return x ** 2 + 5他是二次方程,当x为0的时候y取得最小值,我们梯度下降就是要得到y的最小值方程的导数为2*xdef df(x): """ Derivative of `f` with respect to `x`. """ return 2*x我们假设当x=2的时候,方程的倒数为4,因此切线方程斜率为4,根据运算得到切线方程原创 2021-06-14 17:00:10 · 134 阅读 · 0 评论 -
MiniFlow -- 9.简单理解反向传播
我们先来实现sigmoid 类的backward 方法,这里先展示Layer的变化,Input和Linear的backpropagation 的工作方式我们先看看Layerclass Layer: def __init__(self, inbound_layers=[]): # 本层的输入层列表 self.inbound_layers = inbound_layers self.value = None self.outbound_lay原创 2021-06-14 16:44:33 · 163 阅读 · 0 评论 -
MiniFlow -- 8.简单理解梯度
让我们通过一个简单的例子来完成梯度计算如下一个图图中+表示加法运算,X表示乘法运算如上图,H表示乘法节点,F,G分别表示加法节点那么完整的公式如下所示当改变了F或者G,和改变a, b, x, or y,都会改变输出H。H依赖所有输入变量构成的一个多维度空间,输入一些小的变化都会改变输出H。这个多维度斜坡就是梯度。对输入向量矩阵进行偏导当前层需要获取其输入层的梯度来计算自己的梯度其实我们是向梯度的反方向移动,如上图,当计算到梯度小于0的时候,我们需要向右移动(正方向)达到谷底,当梯度原创 2021-06-12 18:34:15 · 261 阅读 · 0 评论 -
MiniFlow -- 7.简单理解梯度下降
我们已经实现了神经网络,激活函数,和损失函数,这个流程只是前向计算,还不具有学习的能力,接下来我们来实现学习部分BackpropagationBackpropagation 可以实现网络学习,但是怎么实现学习的功能呢,我们使用梯度下降的方式来达到学习的效果可以看看梯度下降推导 梯度下降简单实现Gradient Descent如上图,想象在三维坐标空间中一个点,在现实生活中,在一个斜坡上放置一个球的比喻很是恰当。点的高度表示当前网络的输出和正确的网络输出之间的差别,这个时候的参数是模型当前的参数。因此原创 2021-06-09 22:42:39 · 132 阅读 · 0 评论 -
MiniFlow -- 6.Cost
我们已经知道了什么是激活函数,但是怎么评判我们的模型的好坏的标准呢,这里我们引出损失函数。有很多技术来定义模型的精确度,都是为了产生能够尽量接近真实值,人们使用不同的名称来定义这个精准度的度量方法,可以叫做loss或者cost,这里会使用cost多些接下来我们看一个均方误差的损失公式(mean squared error(MSE)).这里的w表示神经网络里的要学习的权重,b是偏量,m是一个批次总共训练样本,可以将a看作真实值,y(x)为网络输出,我们的目的是将y(x) 和 a 尽最大程度的相似,这里原创 2021-06-06 16:34:25 · 127 阅读 · 0 评论 -
MiniFlow -- 5.Sigmoid Funcition
前几节写了线性方程,但是如果我们想预测概率,可能梯度爆炸,于是我们使用激活函数对输出进行约束如我们使用sigmoidsigmoid可以将输出约束到0到1线性变换对于简单的线性计算是非常有效的,但是神经网络需要更为复杂的计算。对于一个原始的神经网络设计:感知器,表现为二进制,这里会设计一些阈值和权重,当输入太大的话,就输出1,输入太小的话就输出0,但是二进制感知器是不连续的。sigmoid函数是完美的连续s函数根据求导数的规则,sigmoid的导数为...原创 2021-06-06 11:59:54 · 140 阅读 · 0 评论 -
MiniFlow -- 4.Linear Transform
还记得以前的要给公式上面的表述方式可以理解为和公式的方式,接下来我们使用矩阵的方式,将所有的x表示为矩阵X,所有的w为矩阵W,当然b也可以理解为一个向量如果我们认为 Linear 节点是一个1个输入,就是对应上面公式i=1,但是要对应k个输出,上面的公司就不能用了,接下来我们就得用矩阵的方式表示我们使用X表示一个 1x1矩阵W就变成了1xk矩阵但是更具行列式的相乘规则,上面的是错的,怎么也得不到一个k维向量,怎么办,只能用矩阵的广播来解释,用X里的一个和W里的逐个相乘,得到一个k向量。然后呢原创 2021-06-01 23:48:16 · 187 阅读 · 2 评论 -
MiniFlow -- 3.Learning
线性计算正如现在的 MiniFlow,我们的网络计算输入得到输出,只做了简单的加法,不能做预测,这不是我们想要的,我们可以在输入上加上权重,进行约束,来达到预测的功能一个简单的神经网络节点依赖于三个部件inputs:x(vector),这是输入向量weights:w(vector), 这个是输入的权重向量bias:b(scalar),这个是偏移标量输出就是如下公式我们可以通过改变权重,这样可以改变某一个输入对输出的贡献,神经网络就是要学习这里的权重,就能够将输入按照一定规则得到输出。反原创 2021-06-01 22:11:50 · 147 阅读 · 0 评论 -
MiniFlow -- 1.什么是神经网络
神经网络1. 什么是神经网络2. 前向传播3. Graphs4. Neurons and MiniFlow4. 网络节点之间的拓扑关系1. 什么是神经网络如上图,这是一个简单的神经网络,神经网络就是一个包含数学运算的流程图(Graph),这些数学运算包括矩阵运算,还有激活函数。这个图表包括节点/神经元(neurons/nodes),链接/边界线(links/edges)。每一层的节点的就是使用上一层的的输出作为本层的输入进行数学运算,当然不包括输入层次(input layer),因为输入层不进行运算原创 2021-05-31 21:48:19 · 210 阅读 · 0 评论 -
MiniFlow -- 2.什么是神经网络
1.神经网络如上图,这是一个简单的神经网络,神经网络就是一个包含数学运算的流程图(Graph),这些数学运算包括矩阵运算,还有激活函数。这个图表包括节点/神经元(neurons/nodes),链接/边界线(links/edges)。每一层的节点的就是使用上一层的的输出作为本层的输入进行数学运算,当然不包括输入层次(input layer),因为输入层不进行运算比如,每一个节点进行f(x,y)的运算,x和y都是将来自上一层的输出作为本层的输入。因此,每一层都会生成一个输出值,输出层除外(output .原创 2021-05-27 00:36:54 · 221 阅读 · 6 评论 -
MiniFlow -- 0.介绍
1.什么是MiniFlow在这个专题,学习优达的课程,我们来写一个非常简单的神经网络框架,没错,就像TensorFlow一样,TensorFlow是非常受欢迎的开源神经网络库之一,这里,我们来构建一个简单的TensorFlow库,因此叫做MiniFlow,为什么要这么做呢?之前你肯定学习了什么是前向学习,反像传播(backpropagation),differentiable graphs(可微图)我的理解是神经网络的链接方式,很多神经节点有规律的链接到一起,梯度下降等概念,这里我们就通过实现一个Min原创 2021-05-26 23:45:51 · 241 阅读 · 0 评论