
深度学习入门
深度学习
我是小杨我就这样
当一个代码的工匠回首往事,不因虚度年华而悔恨,也不因碌碌无为而羞愧,这样当他老去的时候,可以很自豪地告诉世人,我曾经将代码注入生命去打造互联网的浪潮之巅
公众号《小杨的技术人生》
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深度学习入门——感知器实现逻辑电路
1. 与门、与非门、或门与门真值表:与非门真值表:或门真值表:perceptron.py:import numpy as np# 使用权重和偏置实现逻辑电路def AND(x1, x2): """与门""" x_input = np.array([x1, x2]) weight = np.array([1, 1]) bais = -2 ...原创 2019-08-31 12:00:31 · 1289 阅读 · 0 评论 -
深度学习入门——神经网络激活函数之阶跃函数
import numpy as npimport matplotlib.pyplot as pltdef step_function(x): return np.array(x > 0, dtype=np.int)x = np.arange(-0.5, 0.5, 0.01)y = step_function(x)plt.plot(x, y)plt.ylim(-0...原创 2019-09-04 19:35:45 · 1687 阅读 · 0 评论 -
深度学习入门——神经网络激活函数之sigmoid函数
sigmoid函数:import numpy as npimport matplotlib.pyplot as pltdef sigmoid(x): return 1 / (1 + np.exp(-x))x = np.arange(-5, 5, 0.1)y = sigmoid(x)plt.plot(x, y)plt.ylim(-0.1, 1.1) # 指定y轴的范...原创 2019-09-04 19:39:46 · 1259 阅读 · 0 评论 -
深度学习入门——神经网络激活函数之Relu函数
Relu函数:import numpy as npimport matplotlib.pyplot as pltdef relu(x): return np.maximum(0, x)x = np.arange(-5, 5, 0.1)y = relu(x)plt.plot(x, y)plt.title('Relu')plt.xlabel('x')plt.yl...原创 2019-09-04 19:45:19 · 1558 阅读 · 0 评论 -
深度学习入门——单层神经网络实现
import numpy as npX = np.array([1, 2])print(X.shape)W = np.array([[1, 3, 5], [2, 4, 6]])print(W.shape)Y = np.dot(X, W)print(Y)原创 2019-09-04 20:24:29 · 1661 阅读 · 1 评论 -
深度学习入门——三层神经网络(前向处理)
设定一个三层神经网络,输入层(第0层)2个神经元,第一层3个神经元,第二层2两个神经元,输出层3个神经元。1. 输入层到第一层的信号传递2. 第一层到第二层的信号传递3. 第二层到输出层的信号传递a1, a2, a3…是对应的每个神经元的输入信号,要通过y(x)、sigama(x)激活函数转化为输出信号。sigama(x)——输出层的激活函数,与前面的不一样偏置b,在除了输...原创 2019-09-04 22:47:21 · 3011 阅读 · 0 评论 -
深度学习入门——softmax函数实现
在分类问题中经常使用softmax函数:分子:输入信号ak的指数函数分母:所有输入信号的指数函数和由上图可得,softmax函数的输出层的各个神经元都受到所有输入信号的影响1. softmax函数的实现# 神经网络的多元分类利用到softmax函数import numpy as npa = np.array([0.3, 2.9, 4])exp_a = np.exp(a...原创 2019-09-05 22:55:51 · 1032 阅读 · 0 评论 -
深度学习入门——softmax函数的改进
softmax函数的运算涉及到了指数函数的计算,故对于计算机而言就存在了一个 “溢出问题”因为指数函数的增长容易变得非常大,这些超大值之间进行除法,结果会出现 nan(not a number 不确定)计算机在进行数值运算时,数值的大小必须在4字节或者8字节的有效数据带宽内故需要对softmax函数进行改进:在分子分母同乘以C常数,结果不变。故在softmax函数的指数运算中,加...原创 2019-09-05 23:16:34 · 2818 阅读 · 0 评论 -
深度学习入门——MNIST手写数字识别之数据集处理,下载和读入
1. MNIST数据集:0~9的数字组成(故对于的神经网络输出层应该有10个神经元)训练图像:6万张测试图像:1万张28*28像素的灰度图像(1通道),各像素值0~255之间机器学习的问题也就是**学习(训练)和推理(预测)**的处理对于神经网络,首先使用训练数据进行权重的参数学习,再利用学习到的参数,对输入数据进行分类...原创 2019-09-07 16:20:02 · 4828 阅读 · 0 评论 -
深度学习入门——MNIST手写数字识别之MNIST数据显示
利用python中的 PIL(python Image Library) 模块进行显示import sys, ossys.path.append(os.pardir)import numpy as npfrom dataset.mnist import load_mnistfrom PIL import Imagedef img_show(img): pil_img = I...原创 2019-09-07 16:28:27 · 1321 阅读 · 3 评论 -
深度学习入门——MNIST手写数字识别之神经网络的实现
神经网络的输入层有784个神经元(因为图像像素28*28)输出层有10个神经元(数字0~9有十个类别)第一个隐藏层:50个神经元**(任意设置的值)**第二个隐藏层:100个神经元**(任意设置的值)**neuralnet_mnist.py(假设学习过程已经结束)# coding: utf-8import pickleimport sys, ossys.path.append(...原创 2019-09-07 18:19:01 · 1487 阅读 · 0 评论 -
神大学习入门——MNIST手写字识别之神经网络实现——批处理
neural_network.py(加上批量数据)# coding: utf-8import pickleimport sys, ossys.path.append(os.pardir)import numpy as npfrom dataset.mnist import load_mnist# --------------------------------激活函数定义-...原创 2019-09-07 18:56:11 · 609 阅读 · 0 评论 -
深度学习入门——损失函数——均方误差
损失函数(loss function)可以为任意函数,常用的是均方误差和交叉熵误差损失函数:最优参数解的参考指标,希望它越小越好用于评价神经网络的性能“恶劣程度”,当前神经网络对监督数据(训练数据)在多大程度上不拟合,不一致均方误差(mean squared error):yk:神经网络的输出tk:监督数据(训练数据)mean_squared_error.py# oding: ...原创 2019-09-08 09:08:03 · 7021 阅读 · 2 评论 -
深度学习入门——损失函数——交叉熵误差
交叉熵误差(cross entropy error):log表示lnyk:神经网络输出tk:正确解的标签tk一般采用one-hot表示,这样乘积的结果由正确解对应的值所决定yk越小,E越大cross_entropy_error.py# oding:utf-8import numpy as npdef cross_entropy_error(y, t): del...原创 2019-09-08 09:45:46 · 1502 阅读 · 0 评论 -
深度学习入门——mini_batch小批量数据提取
在全部数据中提取出小批量的数据,作为全部数据的近似。神经网络的学习也就是针对每个mini_batch数据进行学习# oding:utf-8import sys, ossys.path.append(os.pardir)import numpy as npfrom dataset.mnist import load_mnist(x_train, t_train), (...原创 2019-09-09 13:20:19 · 3206 阅读 · 0 评论 -
深度学习入门——mini_batch小批量数据的交叉熵误差
# coding:utf-8import sys, ossys.path.append(os.pardir)import numpy as npfrom dataset.mnist import load_mnist(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, one_hot_label=True...原创 2019-09-09 15:24:31 · 1490 阅读 · 0 评论 -
深度学习入门——为何要设定损失函数
为了找到损失函数的最小值,需要计算参数的导数 (梯度),然后以这个导数逐步跟新参数的值导数负:使权重参数向正方向改变,减少损失函数值导数正:使权重参数向负方向改变,减少损失函数的值导数=0:权重参数的更新会停下来(若神经元的激活函数是阶跃函数,则除了x=0处,其余地方导数都为0,神经网络无法学习跟新参数)在进行神经网络的学习时,不能将识别精度作为指标,因为如果以识别精度为指标,导数大...原创 2019-09-09 16:13:29 · 1176 阅读 · 0 评论 -
深度学习入门——数值微分,求导数
# coding: utf-8import numpy as npimport matplotlib.pylab as plt# ------------------定义微分函数-------------------------------------------------------------def numerical_diff(f, x): h = 1e-04 # 0....原创 2019-09-10 12:17:57 · 1971 阅读 · 3 评论 -
深度学习入门——梯度下降求解函数极小值
# coding: utf-8import numpy as np# -----------------------------定义梯度(偏导)求解函数--------------------------------------------def numerical_gradient(f, x): h = 1e-04 # 0.0001 grad = np.zeros_...原创 2019-09-10 16:30:57 · 1916 阅读 · 0 评论 -
深度学习入门——简单神经网络(2层)求梯度
# coding: utf-8import sys, ossys.path.append(os.pardir)import numpy as np# ---------------------------激活函数定义---------------------------------------------------def softmax(a): """解决softmax函数...原创 2019-09-10 18:10:48 · 734 阅读 · 0 评论 -
深度学习入门——乘法层(Mullayer)
上游的值乘以输入数据的“翻转值”# coding:utf-8# 将神经网络的“层”实现为一个类。这里的层是神经网络中功能的单位,例如负责sigmoid函数的sigmoid、负责矩阵乘法的Affine等,都以层# 的单位及逆行实现。这里也以层的单位来实现乘法节点和加法节点class Mullayer: """乘法层""" def __init__(self): ...原创 2019-09-15 17:23:11 · 2654 阅读 · 0 评论 -
深度学习入门——加法层(Addlayer)
上游的值直接传给下游class ADDlayer: def __init__(self): pass # 什么也不运行 def forward(self, x, y): out = x + y return out def backward(self, dout): dx = dout ...原创 2019-09-15 17:25:22 · 2388 阅读 · 0 评论 -
深度学习入门——Relu激活函数层
正向传播x>0,反向传播时,则会将上游的值原封不动的传递给下游正向传播x<0,反向传播时,则会将在此刻停止# coding: utf-8class Relu(): """Relu函数,反向传播时,x>0则会将上游的值原封不动的传递给下游(dx = dout) x<0则会将信号停在这里(dout=...原创 2019-09-15 17:32:00 · 1980 阅读 · 0 评论 -
深度学习入门——Sigmoid函数(反向传播)
反向传播理解:就相当于上游过来的值乘以该节点线路的导数# coding: utf-8import numpy as npclass Sigmod: def __init__(self): self.out = None def forward(self, x): out = 1 / (1 + np.exp(-x)) ...原创 2019-09-15 19:36:34 · 6982 阅读 · 2 评论 -
深度学习入门——Affine层(仿射层-矩阵乘积)
神经网络的正向传播中进行的矩阵乘积运算在几何学领域被称为“仿射变换(Affine)”1. 输入为单个数据2. 批版本的Affine# coding: utf-8import numpy as npclass Affine: """定义仿射层(矩阵乘积)""" def __init__(self, W, b): self.W = W ...原创 2019-09-15 20:44:00 · 20888 阅读 · 0 评论 -
深度学习入门——softmax_with_Loss(输出层和损失函数的反向传播层)
# coding: utf-8import numpy as np# ---------------------------激活函数定义---------------------------------------------------def softmax(a): """解决softmax函数的溢出问题,利用c(输入的最大值),softmax函数减去这个最大值保证数据不溢...原创 2019-09-15 22:38:09 · 2877 阅读 · 9 评论 -
深度学习入门——反向传播的两层神经网络实现手写数字识别
# coding: utf-8import sys, ossys.path.append(os.pardir)import numpy as npfrom collections import OrderedDictfrom dataset.mnist import load_mnistimport time# ------------------------------...原创 2019-09-16 21:47:43 · 1255 阅读 · 1 评论 -
SGD(随机梯度下降算法)的缺点
虽然SGD很容易实现,到纳什在解决某些问题时,可能没有效率例如:原创 2019-09-22 15:18:25 · 4093 阅读 · 0 评论 -
Momentum算法
Momentum的含义是‘动量’# 为了解决SGD随机梯度下降算法的缺点,引入了Momentum# v表示在梯度方向上的受力import numpy as npclass Momentum: def __init__(self, learning_rate=0.01, momentum=0.9): self.learning_rate = learning_...原创 2019-09-22 15:42:47 · 3538 阅读 · 1 评论 -
AdaGrad(自适应梯度算法),Adaptive
学习衰减率:随着学习的进行,使得学习率逐渐减小。AdaGrad会为参数的每个元素适当的体哦阿正学习率原创 2019-09-22 18:51:04 · 14628 阅读 · 4 评论 -
Adam算法
momentum算法和AdaGrad算法的融合class Adam: """Adam (http://arxiv.org/abs/1412.6980v8)""" def __init__(self, lr=0.001, beta1=0.9, beta2=0.999): self.lr = lr self.beta1 = beta1 ...原创 2019-09-22 19:01:37 · 1400 阅读 · 0 评论 -
四钟参数更新算法对比——SGD, Momentum, AdaGrad, Adam
# coding: utf-8import sys, ossys.path.append(os.pardir) # 为了导入父目录的文件而进行的设定import numpy as npimport matplotlib.pyplot as pltfrom collections import OrderedDict# -----------------------SGD、Mome...原创 2019-09-22 19:09:11 · 1078 阅读 · 0 评论 -
隐藏层的激活值的分布
观察权重初始值是如何影响隐藏层的激活值(激活函数的输出)的分布Xacier权重初始值Relu函数的权重初始值tanh和sigmoid函数都是线性函数,故可以采用Xavier权重初始值但是,Relu有其专属的权重初始值‘He初始值’基于MNIST数据集的权重初始值的比较...原创 2019-09-22 20:01:58 · 1652 阅读 · 3 评论 -
Batch Normalization
原创 2019-09-23 08:12:13 · 145 阅读 · 0 评论 -
卷积神经网络CNN(Convolutional Neural Network)
基于全连接层的神经网络:Affine的缺点:会忽略输入数据的形状,即忽略其空间特征,将输入数据变换成一维数组CNN有时会忽略池化层Pooling,conv层会保持形状不变,保持输入数据的空间特征传递给下一层将Conv输出的数据称为“特征图”卷积计算填充padding步幅stride滤波器输出计算式...原创 2019-09-23 22:25:29 · 391 阅读 · 0 评论 -
CNN(高维数据卷积理解)
高维数据卷积结合方块思想理解CNN卷积(Height, Width, Channel)基于多个滤波器加上偏置批处理池化(Max)原创 2019-09-25 13:04:52 · 2636 阅读 · 0 评论 -
im2col函数
卷积层与池化层的实现复杂,但实际上,通过某种技巧,就可以轻松地实现。CNN中的数据是四维的数据(10, 1, 28, 28),对应于 (批量数,通道,高,宽)im2col函数: numpy数组不建议采用for循环,因为for循环会将处理速度变慢,im2col是一个函数,将输入数据展开适合滤波器(权重)。对三维数据应用im2col之后,数据转换为2维矩阵...原创 2019-09-25 22:17:14 · 1268 阅读 · 0 评论 -
CNN前向传播实现
im2col函数将输入数据4维展开成2维,避免使用for循环# coding: utf-8# im2col函数用于Numpy数组中访问元素,因为利用for循环会导致速度下降# im2col将输入数据展开会适合滤波器(权重)的数据形式import numpy as npdef im2col(input_data, filter_h, filter_w, stride=1, pad=0...原创 2019-09-30 18:37:06 · 511 阅读 · 0 评论 -
打乱数据集
def shuffle_dataset(x, t): """打乱数据集 Parameters ---------- x : 训练数据 t : 监督数据 Returns ------- x, t : 打乱的训练数据和监督数据 """ permutation = np.random.permutation(x.shap...原创 2019-09-30 19:56:47 · 1647 阅读 · 0 评论 -
向更深的网络进发
加深层的动机减少网络的参数数量== 一个55的卷积层功能=2个33的卷积层==扩大感受野(receptive field)提高网络表现力 :通过叠加层,将Relu等激活函数夹于卷积层的中间,进一步提高网络的表现力(能够表示更加复杂的东西,加入了非线性函数)学习更高效:分层的对数据进行学习,各层要学习的东西变得更加简单。...原创 2019-10-03 20:13:34 · 178 阅读 · 0 评论