神经网络模型

卷积神经网络详解

假装没事ソ 提交于 2019-12-27 17:33:48
1 前言 在dl中,有一个很重要的概念,就是卷积神经网络CNN,基本是入门dl必须搞懂的东西。本文基本根据斯坦福的机器学习公开课、cs231n、与七月在线寒老师讲的5月dl班第4次课CNN与常用框架视频所写,是一篇课程笔记。本只是想把重点放在其卷积计算具体是怎么计算怎么操作的,但后面不断补充,故写成了关于卷积神经网络的通俗导论性的文章。有何问题,欢迎不吝指正。 2 人工神经网络 2.1 神经元 神经网络由大量的节点(或称“神经元”、“单元”)和相互连接而成。每个神经元接受输入的线性组合,进行非线性变换(亦称激活函数activation function)后输出。每两个节点之间的连接代表加权值,称之为权重(weight)。不同的权重和激活函数,则会导致神经网络不同的输出。 举个手写识别的例子,给定一个未知数字,让神经网络识别是什么数字。此时的神经网络的输入由一组被输入图像的像素所激活的输入神经元所定义。在通过激活函数进行非线性变换后,神经元被激活然后被传递到其他神经元。重复这一过程,直到最后一个输出神经元被激活。从而识别当前数字是什么字。 神经网络的每个神经元/单元如下 类似wx + b的形式,其中 a1~an为输入向量,当然,也常用x1~x n表示输入 w1~wn为权重 b为偏置 bias f 为激活函数 t 为输出 如果只是上面这样一说,估计以前没接触过的十有八九又必定迷糊了

卷积神经网络--CNN

◇◆丶佛笑我妖孽 提交于 2019-12-27 17:33:24
1.人工神经网络 神经网络由大量的节点(或称“神经元”、“单元”)和相互连接而成。每个神经元接受输入的线性组合,进行非线性变换(亦称激活函数activation function)后输出。每两个节点之间的连接代表加权值,称之为权重(weight)。不同的权重和激活函数,则会导致神经网络不同的输出。 举个手写识别的例子,给定一个未知数字,让神经网络识别是什么数字。此时的神经网络的输入由一组被输入图像的像素所激活的输入神经元所定义。在通过激活函数进行非线性变换后,神经元被激活然后被传递到其他神经元。重复这一过程,直到最后一个 输出神经元 被 激活 。从而识别当前数字是什么字。 神经网络的每个神经元/单元如下 类似wx + b的形式,其中 a1~an为输入向量,当然,也常用x1~xn表示输入 w1~wn为权重 b为偏置bias f 为激活函数 t 为输出 如果只是上面这样一说,估计以前没接触过的十有八九又必定迷糊了。事实上,在20世纪50/60年代,上述简单神经元被称之为感知机,可以把感知机理解为一个根据不同因素、以及各个因素的重要性程度而做决策的模型。 举个例子,这周末北京有一草莓音乐节,那去不去呢?决定你是否去有3个因素,这三个因素可以对应三个输入,分别用x1、x2、x3表示,此外,这三个因素对做决策的影响程度不一样,各自的影响程度用权重w1、w2、w3表示。一般来说

BP神经网络模型及算法推导

余生颓废 提交于 2019-12-27 17:33:03
一,什么是BP "BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的 神经网络模型 之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用 最速下降法 ,通过反向传播来不断调整网络的权值和阈值,使网络的 误差平方和 最小。 BP神经网络 模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。" 我们现在来分析下这些话: “是一种按误差逆传播算法训练的多层前馈网络” BP是后向传播的英文缩写,那么传播对象 是什么? 传播的目的是什么?传播的方式是后向,可这又是什么意思呢。 传播的对象是误差,传播的目的是得到所有层的估计误差,后向是说由后层误差推导前层误差: 即BP的思想可以总结为 利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层的反传下去,就获得了所有其他各层的误差估计。 “BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)” 我们来看一个最简单的三层BP: “BP网络能学习和存贮大量的输入-输出模式映射关系

神经网络-激励函数

孤者浪人 提交于 2019-12-27 17:32:45
一、前言 激励函数在神经网络的作用通俗上讲就是讲多个线性输入转换为非线性的关系。 不使用激励函数的话,神经网络的每层都只是做线性变换,多层输入叠加后也还是线性变换。因为线性模型的表达能力不够,激励函数可以引入非线性因素。 1.1 单一的神经网络 如果没有激励函数,在单层神经网络中,我们的输入和输出关系如下图: 这是一个线性方程的直观表示,如果我们增加感知机,如下图: 其中结果输出就是右边的绿色区域,但是本质上还是各种线性方程的组合,对于非线性数据则无法很好的处理。如下数据: 上图数据你就没有办法画出一条直线来将数据区分开. 这时候有两个办法,第一个办法,是做线性变换(linear transformation),比如讲x,y变成x^2,y^2,这样可以画出圆形。如图所示: 如果将坐标轴从x,y变为以x^2,y^2为标准,你会发现数据经过变换后是线性可分的了。大致示意图如下: 1.2 含有激励函数的神经网络 加入非线性激励函数后,神经网络就有可能学习到平滑的曲线来分割平面,而不是用复杂的线性组合逼近平滑曲线来分割平面。 这就是为什么我们要有非线性的激活函数的原因。如下图所示说明加入非线性激活函数后的差异,上图为用线性组合逼近平滑曲线来分割平面,下图为平滑的曲线来分割平面: 二、激励函数 1、激活函数通常有如下一些性质: 非线性: 当激活函数是线性的时候

\"多层感知器\"--MLP神经网络算法

烈酒焚心 提交于 2019-12-27 11:23:09
提到人工智能(Artificial Intelligence,AI),大家都不会陌生,在现今行业领起风潮,各行各业无不趋之若鹜,作为技术使用者,到底什么是AI,我们要有自己的理解. 目前,在人工智能中,无可争议的是深度学习占据了统治地位,,其在图像识别,语音识别,自然语言处理,无人驾驶领域应用广泛. 如此,我们要如何使用这门技术呢?下面我们来一起了解"多层感知器",即MLP算法,泛称为神经网络. 神经网络顾名思义,就像我们人脑中的神经元一样,为了让机器来模拟人脑,我们在算法中设置一个个节点,在训练模型时,输入的特征与预测的结果用节点来表示,系数w(又称为"权重")用来连接节点,神经网络模型的学习就是一个调整权重的过程,训练模型一步步达到我们想要的效果. 理解了原理,下面来上代码直观看一下: 1.神经网络中的非线性矫正 每个输入数据与输出数据之间都有一个或多个隐藏层,每个隐藏层包含多个隐藏单元. 在输入数据和隐藏单元之间或隐藏单元和输出数据之间都有一个系数(权重). 计算一系列的加权求和和计算单一的加权求和和普通的线性模型差不多. 线性模型的一般公式: y = w[0]▪x[0]+w[1]▪x[1] + ▪▪▪ + w[p]▪x[p] + b 为了使得模型比普通线性模型更强大,所以我们要进行一些处理,即 非线性矫正 (rectifying nonlinearity),简称为

Pycharm中:训练/测试神经网络由运行脚本文件(train.sh)启动,程序出错,如何进行debug操作?

ⅰ亾dé卋堺 提交于 2019-12-27 05:24:28
近期利用 tf-faster-rcnn 跑自己的数据集.测试检测效果. 训练部分已经跑通,见博客: 链接. 现在进行测试时出现错误. 想要进行Debug,但是由于它是运行的脚本文件进行的测试,无法直接运行某个py文件,进行调试,故卡在这里. 脚本文件如下(以测试脚本为例): #!/bin/bash set - x set - e #set -v export PYTHONUNBUFFERED= "True" GPU_ID= $1 DATASET= $2 NET= $3 array= ( $@ ) len=$ { #array[@]} EXTRA_ARGS=$ { array [ @ ] :3: $len } EXTRA_ARGS_SLUG=$ { EXTRA_ARGS/ / / _ } case $ { DATASET } in pascal_voc ) TRAIN_IMDB= "voc_2007_trainval" TEST_IMDB= "voc_2007_test" # ITERS=70000 # 默认 ITERS=110000 ANCHORS= "[8,16,32]" RATIOS= "[0.5,1,2]" ; ; pascal_voc_0712 ) TRAIN_IMDB= "voc_2007_trainval+voc_2012_trainval" TEST_IMDB=

卷积神经网络CNN的可视化

▼魔方 西西 提交于 2019-12-27 03:21:14
通常我们认为深度学习模型是“黑盒”的,即模型学到的表示很难用人类可以理解的方式来提取和呈现。然而对于卷积神经网络来说却不是这样的。CNN学到的表示非常适合可视化,因为CNN本身就是 视觉概念的表示 。 CNN可视化和解释:【本文给出3个层面的可视化】 1)可视化卷积神经网络的中间输出(中间激活) 有助于理解卷积网络神经连续的层如何对输入进行变换,也有助于初步了解卷积神经网络每个过滤器的含义。 2)可视化卷积神经网络的过滤器 有助于精确理解卷积神经网络中每个过滤器容易接受的视觉模式或视觉概念。 3)可视化图像中类激活的热力图 有助于理解图像的哪个部分被识别为属于某个类别,从而可以定位图像中的物体。 一、可视化中间激活 可视化中间激活,是指对于给定输入,展示网络中各个卷积层和池化层输出的特征图(层的输出通常被称为该层的激活,即激活函数的输出)。 可视化中间激活,可以看到输入如何被分解为网络学到的不同过滤器。 从三个维度对特征图进行可视化:宽度、高度和深度(通道)。每个通道都对应相对独立的特征,所以讲这些特征图可视化的正确方法是将每个通道的内容分别绘制成二维图像。 原图如下: 第一层卷积层第4通道可视化结果: 第一层卷积层第7通道可视化结果: 第5个卷积层第5个通道可视化: 第5个卷积层的第30通道可视化: 上例中揭示了DL学到的表示存在一个重要普遍特征: 随着层数的加深

【神经网络与深度学习】从迁移学习到强化学习

前提是你 提交于 2019-12-26 21:57:31
一. 深度学习及其适用范围 大数据造就了深度学习,通过大量的数据训练,我们能够轻易的发现数据的规律,从而实现基于监督学习的数据预测。 没错,这里要强调的是基于监督学习的,也是迄今为止我在讲完深度学习基础所给出的知识范围。 基于卷积神经网络的深度学习(包括CNN、RNN),主要解决的领域是 图像、文本、语音 ,问题聚焦在 分类、回归 。然而这里并没有提到推理,显然我们用之前的这些知识无法造一个 AlphaGo 出来,通过一张图来了解深度学习的问题域: 2016年的 NIPS 会议上,吴恩达 给出了一个未来 AI方向的技术发展图,还是很客观的: 毋庸置疑,监督学习是目前成熟度最高的,可以说已经成功商用,而下一个商用的技术 将会是 迁移学习(Transfer Learning),这也是 Andrew 预测未来五年最有可能走向商用的 AI技术。 二. 迁移学习(举一反三的智能) 迁移学习解决的问题是 如何将学习到知识 从一个场景迁移到另一个场景? 拿图像识别来说,从白天到晚上,从 Bottom View 到 Top View,从冬天到夏天,从识别中国人到 识别外国人…… 这是一个普遍存在的问题,问题源自于你所关注的场景缺少足够的数据来完成训练,在这种情况下你需要 通过迁移学习来实现 模型本身的泛化能力 。 借用一张示意图(From:A Survey on Transfer Learning

1-1 机器学习和深度学习综述

ⅰ亾dé卋堺 提交于 2019-12-26 00:33:31
人工智能\机器学习和深度学习的概念及关系 人工智能、机器学习和深度学习的概念在近些年十分火热,但很多从业者也难以说清它们之间的关系,外行人更是雾里看花。学习深度学习,需要先从三个概念的正本清源开始。 三者覆盖的技术范畴是逐层递减的,人工智能是最宽泛的概念,机器学习则是实现人工智能的一种方式,也是目前较有效的方式。深度学习是机器学习算法中最热的一个分支,在近些年取得了显著的进展,并代替了多数传统机器学习算法。所以,三者的关系可用下图表示,人工智能 > 机器学习 > 深度学习。 图1:人工智能、机器学习和深度学习三者之间的概念范围 如字面含义,人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的科学。由于这个定义只阐述了目标,而没限定方法。所以,实现人工智能存在的诸多方法和分支,导致其变成一个“大杂烩”式的学科。 与此不同,机器学习,尤其是监督学习则有更加明确的指代。机器学习是专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。这句话有点“云山雾罩”的感觉,让人不知所云。 机器学习的实现步骤可以分成两步,训练和预测。这两个专业名词类似于归纳和演绎的含义。归纳是从具体案例中抽象一般规律,机器学习中的“训练”亦是如此。从一定数量的样本(已知模型输入 X X X 和模型输出 Y Y Y )中,学习出输出 Y

TensorFlow2.0 循环神经网络

主宰稳场 提交于 2019-12-24 17:55:19
一、Embedding 层 1、词嵌入 在神经网络中,单词的表示向量可以直接通过训练的方式得到,我们把单词的表示层叫做Embedding 层。Embedding 层负责把单词编码为某个向量𝑣𝑒𝑐,他接受的是采用数字编码的单词𝑖𝑑𝑥,如2 表示“I”,3 表示“me”等,系统总单词数量记为𝑁𝑣𝑜𝑐𝑎𝑏,输出长度为f 的向量𝑣𝑒𝑐:𝑣𝑒𝑐 = 𝑓(𝑖𝑑𝑥|𝑁𝑣𝑜𝑐𝑎𝑏 , 𝑓) Embedding 层实现起来非常简单,通过一个shape 为[𝑁𝑣𝑜𝑐𝑎𝑏, 𝑓]的查询表table,对于任意的单词𝑖𝑑𝑥,只需要查询到对应位置上的向量返回即可:𝑣𝑒𝑐 = 𝑡𝑎𝑏𝑙𝑒[𝑖𝑑𝑥] Embedding 层是可训练的,他可放置在神经网络之前,完成单词到向量的转换,得到的表示向量可以继续通过神经网络完成后续任务,并计算误差ℒ,采用梯度下降算法来实现端到端(end-to-end)的训练。 from tensorflow.keras import Sequential,layers import tensorflow as tf x = tf.range(10) x = tf.random.shuffle(x) # 创建共10 个单词,每个单词用长度为4 的向量表示的层,每个索引代表一个单词的向量 net = layers.Embedding(10, 4) out = net(x) #