神经网络模型

卷积神经网络之-NiN网络(Network In Network)

心已入冬 提交于 2020-01-27 03:54:35
更多内容请关注『 机器视觉 CV 』公众号 原文地址 简介 Network In Network 是发表于 2014 年 ICLR 的一篇 paper。当前被引了 3298 次。这篇文章采用较少参数就取得了 Alexnet 的效果,Alexnet 参数大小为 230M,而 Network In Network 仅为 29M,这篇 paper 主要两大亮点:mlpconv (multilayer perceptron,MLP,多层感知机)作为 "micro network"和 Global Average Pooling(全局平均池化)。论文地址: https://arxiv.org/abs/1312.4400 创新点 (1) mlpconv Layer 在介绍 mlpconv Layer 之前,我们先看看经典的 Linear Convolutional Layer(线性卷积层)是怎么进行操作的, ( i , j ) 是特征图中像素的位置索引,x_ij 表示像素值,而 k 用于特征图通道的索引,W 是参数,经过 WX 计算以后经过一个 relu 激活进行特征的抽象表示。 下面就介绍 mlpconv Layer 结构 i, j 表示像素下标,xi,j 表示像素值,wk,n 表示第 n 层卷积卷积参数。 以上结构可以进行跨通道的信息融合。MLP 的参数也可以使用 BP 算法训练,与

图像多分类——卷积神经网络

懵懂的女人 提交于 2020-01-26 14:38:45
例子参考: https://www.jiqizhixin.com/articles/2019-05-15-2 数据集: https://www.cs.ccu.edu.tw/~wtchu/projects/MoviePoster/index.html 将获取到原始数据集,其中,有三个文件, Movie Poster Dataset是1980-2015年部分影片海报图片, Movie Poster Metadata是1980-2015年部分影片的数据详情,example: Readme则是对 Movie Poster Metadata文件里边的字段解释,在训练过程中只用到IMPId和 Genre(影片类型)。 步骤: 数据处理 获取到影片的类型对影片类型实现one-hot编码,如果是属于哪个类型,用1表示,其他为0,得到如下文件, 考虑到特征的相关性,删除影片比较少的类型列(将数量小于50的类型列进行删除),最终留下22个电影类型,如下: 将电影类型作为最终的结果值,然后加载图片: for i in tqdm(range(train.shape[0])): img = image.load_img('D:/aayu/实例/图像多分类/data/Images/'+train['ID'][i]+'.jpg',target_size=(400,400,3)) img = image.img

改善深层神经网络:超参数调整、正则化以及优化——2.1 Mini-batch梯度下降

杀马特。学长 韩版系。学妹 提交于 2020-01-26 14:36:24
机器学习的应用是一个高度依赖经验的过程,优化算法能够帮助你快速训练模型。深度学习没有在大数据领域发挥最大的效果我们可以利用一个巨大的数据集来训练神经网络,而在巨大的数据集基础上进行训练速度很慢。 因此,使用快速的优化算法,使用好用的优化算法能够大大提高效率,现在谈谈mini-batch梯度下降法。 向量化能有效地对所有m个例子进行计算,允许处理整个训练集而无需某个明确的公式,所以我们要把训练样本放到巨大的矩阵X中,如下 X = [ x ( 1 ) , x ( 2 ) , . . . , x ( m ) ] X=[x^{(1)},x^{(2)},...,x^{(m)}] X = [ x ( 1 ) , x ( 2 ) , . . . , x ( m ) ] Y = [ y ( 1 ) , y ( 2 ) , . . . , y ( m ) ] Y=[y^{(1)},y^{(2)},...,y^{(m)}] Y = [ y ( 1 ) , y ( 2 ) , . . . , y ( m ) ] X X X 的维数是 ( n x , m ) (n_x,m) ( n x ​ , m ) , Y Y Y 的维数是 ( 1 , m ) (1,m) ( 1 , m ) ,向量化能相对较快地处理所有m个样本,但如果m很大的话,处理速度仍然缓慢,比如说m是500万或者5000万或者更大的一个数

Batch Normalization 批量标准化

喜欢而已 提交于 2020-01-26 10:12:10
本篇博文转自:https://www.cnblogs.com/guoyaohua/p/8724433.html  Batch Normalization作为最近一年来DL的重要成果,已经广泛被证明其有效性和重要性。虽然有些细节处理还解释不清其理论原因,但是实践证明好用才是真的好,别忘了DL从Hinton对深层网络做Pre-Train开始就是一个 经验领先于理论分析 的偏经验的一门学问。本文是对论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》的导读。   机器学习领域有个很重要的假设: IID独立同分布假设 ,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。那BatchNorm的作用是什么呢? BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。   接下来一步一步的理解什么是BN。   为什么深度神经网络 随着网络深度加深,训练起来越困难,收敛越来越慢? 这是个在DL领域很接近本质的好问题。很多论文都是解决这个问题的,比如ReLU激活函数,再比如Residual Network,BN本质上也是解释并从某个不同的角度来解决这个问题的。 一、

深度学习

六眼飞鱼酱① 提交于 2020-01-25 19:06:04
神经网络中激活函数的作用: a. 不使用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。 b. 使用激活函数,能够给神经元引入非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以利用到更多的非线性模型中。 激活函数需要具备以下几点性质: 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参 数。 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率。 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。 Caffe Caffe是纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口; 可以在CPU和GPU直接无缝换:Caffe::set_mode(Caffe::GPU); 在Caffe中图层需要使用C++定义,而网络则使用Protobuf定义。Caffe是一个深度卷积神经网络的学习框架,使用Caffe可以比较方便地进行CNN模型的训练和测试,精于CV领域。 Caffe作为快速开发和工程应用是非常适合的。caffe官方提供了大量examples,照着examples写,caffe只要求会写prototxt就行,它的训练过程、梯度下降算法等等都实现封装好了,懂了prototxt的语法了,基本就能自己构造神经网络了。

Tensorflow 笔记-卷积神经网络

风流意气都作罢 提交于 2020-01-25 08:43:45
参考链接 卷积 Convolutional 有效提取图片特征的方法。一般用一个正方形卷积核,遍历图片上的每一个像素点。图片与卷积核重合区域内相对应的每一个像素值乘卷积核内相对应点的权重,然后求和,再加上偏置后,最后得到输出图片中的一个像素值。 一张分辨率仅仅是 28x28 的黑白图像,就有近 40 万个待优化的参数。现实生活中高分辨率的彩色图像,像素点更多,且为红绿蓝三通道信息。 待优化的参数过多,容易导致模型过拟合。为避免这种现象,实际应用中一般不会将原始图片直接喂入全连接网络。 在实际应用中,会先对原始图像进行特征提取,把提取到的特征喂给全连接网络,再让全连接网络计算出分类评估值。 来源: CSDN 作者: ATM006 链接: https://blog.csdn.net/orchidofocean/article/details/103747304

课程4-第一周-卷积神经网络(Convolutional Neural Networks)

£可爱£侵袭症+ 提交于 2020-01-25 02:33:28
1.1计算机视觉(Computer Vision) 问题分类: 图片分类(Image Classification); 目标检测(Object detection); 神经风格转换(Neural Style Transfer)。 挑战: 数据的输入可能会非常大 。例如一张 1000x1000x3 的图片,神经网络输入层的维度将高达三百万,使得网络权重 W 非常庞大。 后果: 1.经网络结构复杂,数据量相对较少,容易出现 过拟合 ; 2.所需内存和计算量巨大。 措施: 因此,一般的神经网络很难处理蕴含着大量数据的图像。解决这一问题的方法就是使用 卷积神经网络(Convolutional Neural Network, CNN) 。 1.2卷积运算(Convolutional Operation) 以以边缘检测为例,来解释卷积是怎样运算的。 边缘检测 垂直边缘(Vertical Edges)检测 水平边缘(Horizontal Edges)检测 图片的边缘检测可以通过与相应滤波器进行卷积来实现。 举例: 以垂直边缘检测为例,原始图片尺寸为 6x6,中间的矩阵被称作 滤波器(filter) ,尺寸为 3x3,卷积后得到的图片尺寸为 4x4,得到结果如下(数值表示灰度,以左上角和右下角的值为例): 可以看到,卷积运算的求解过程是从左到右,由上到下

卷积神经网络的进一步理解

邮差的信 提交于 2020-01-24 22:02:28
最近又再次学习了一些卷积神经网络,有了一些深层的理解 1、工具安装 安装tensorflow和keras又花了一番功夫,找到了一篇还不错的安装博客,链接如下: Anaconda下安装Tensorflow和Keras的安装教程 现在使用比较多 值得注意的是 我们使用anaconda进行安装,因为keras还需要这几个库的支持,然后再安装上面链接的那一篇博客安装。 pip install numpy pip install matplotlib pip install scipy pip install tensorflow pip install keras 2、理解和感悟 (1) 优化器Optimizer 其中,优化器有以下这些 深度学习——优化器算法Optimizer详解( BGD 、 SGD 、 MBGD 、 Momentum 、 NAG 、 Adagrad 、 Adadelta 、 RMSprop 、 Adam ) 当然比较常用的是SGD,即随机梯度下降算法。 随机梯度下降b站教程 (2)Alex经典cnn网络 AlexNet的整个网络结构就是由5个卷积层和3个全连接层组成的,深度总共8层 # 导包 import keras from keras . models import Sequential from keras . layers import Dense ,

TensorFlow2.0常用激活函数

℡╲_俬逩灬. 提交于 2020-01-24 20:14:33
激活函数是神经网络中一个十分重要的组成部分,它可以对神经元的接收信息进行非线性变换,将变换后的信息输出到下一层神经元 激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中 构造数据 import tensorflow as tf import matplotlib . pyplot as plt x = tf . linspace ( - 5 . , 5 . , 100 ) # 构造一段连续的数据 x_np = x . numpy ( ) # 转换为 ndarray 的类型,画图时 x 和 x_np 都可以使用 Relu ReLU 对小于 0 的值全部抑制为 0;对于正数则直接输出,具有单侧抑制、相对宽松的兴奋边界等特性 表达式: r ( x ) = m a x ( 0 , x ) r(x )=max(0, x) r ( x ) = m a x ( 0 , x ) 代码: y_relu = tf . nn . relu ( x ) plt . plot ( x , y_relu , c = 'red' , label = 'relu' ) plt . ylim ( ( - 1 , 6 ) ) plt . legend ( loc = 'best' ) plt . show ( ) 形状如图: Sigmoid

PYTORCH多层卷积神经网络实现MNIST手写数字识别(python3.7)

a 夏天 提交于 2020-01-24 08:42:15
根据模式识别作业要求写的,总结了以下几点需要注意: 1.主程序段需要加上 # if name == ‘ main ’: # 否则当做模块调用时会直接将该文件重新跑一遍。 2.分类任务网络最后一个全连接层替换成1*1卷积层目前看来可以降低运算量,产生激活作用降低过拟合,训练效果改善明显。 3.添加Batch normalization效果不明显,可能是batch量过小,以后进一步学习和尝试group narmalization。 import time import torch import torch . nn as nn import torch . nn . functional as F import torchvision # torchvision 包收录了若干重要的公开数据集、网络模型和计算机视觉中的常用图像变换 import torchvision . transforms as transforms import cv2 time_start = time . time ( ) class ConvNet ( nn . Module ) : def __init__ ( self ) : super ( ConvNet , self ) . __init__ ( ) self . layer1 = nn . Sequential ( nn . Conv2d ( 1