relu

AlexNet

匿名 (未验证) 提交于 2019-12-03 00:27:02
AlexNet是较早期的一个卷积神经网络,由于其在ImageNet比赛中的出色表现(top1与top5的error rate分别为37.5%与17%),也掀起了学术界对深度学习的研究热潮,下面结合AlexNet的论文,对AlexNet进行简单的总结,有不足的地方,欢迎指正。 AlexNet为8层结构,其中前5层为卷积层,后面3层为全连接层,学习参数6千万个,神经元约有650,000个。 AlexNet在两个GPU同时训练完成。 如图所示,AlexNet第2、4、5层均是与前一层自己GPU内连接,第3层是与前面两层全连接,全连接层是2个GPU全连接。 RPN层在第1、2个卷积层后。 Max pooling层在RPN层以及第5个卷积层后。 ReLU在每个卷积层以及全连接层后。 卷积核大小数量:(由此也可以看出,第二层连接2个GPU其他没有) conv1: 96 11*11*3 conv2: 256 5*5*48 conv3: 384 3*3*256 conv4: 384 3*3*192 conv5: 256 3*3*192 AlexNet的训练数据主要采用ILSVRC2010数据集,其为ImageNet的子集,包含1000类,共1.2million训练图像,50,000验证集,150,000的测试集。 alexNet对于数据的处理方法如下: 初步处理 首先将不同分辨率图像变换到256

Keras学习教程五

匿名 (未验证) 提交于 2019-12-03 00:27:02
原文地址:https://github.com/fchollet/deep-learning-with-python-notebooks/blob/master/4.4-overfitting-and-underfitting.ipynb Overfitting and underfitting 以这种方式处理过度拟合的过程称为正则化。让我们回顾一些最常见的正则化技术,让我们将其应用到实践中,以改进前一章中的电影分类模型。 from keras.datasets import imdb import numpy as np (train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000) def vectorize_sequences(sequences, dimension=10000): # Create an all-zero matrix of shape (len(sequences), dimension) results = np.zeros((len(sequences), dimension)) for i, sequence in enumerate(sequences): results[i, sequence] = 1. # set specific

人脸识别 Lightened CNN

匿名 (未验证) 提交于 2019-12-03 00:22:01
论文地址为: https://arxiv.org/abs/1511.02683 代码地址: https://github.com/AlfredXiangWu/face_verification_experiment 正如前面 《人脸验证:DeepID》 博客所说,人脸验证任务中需要关心两个问题:一个是人脸特征提取,另一个就是如何判断是不是同一个人。特征提取的方法有LBP等传统方法,也有DeepID这样的深度学习方法。判断是不是同一个人的方法简单的有余弦相似度,复杂的有Joint Bayesian。本文主要的内容集中于人脸特征提取,就是使用Lighten CNN提取特征。 概述 为了得到更好的准确度,深度学习的方法都趋向更深的网络和多个模型ensemble,这样导致模型很大,计算时间长。本文提出一种轻型的CNN,在取得比较好的效果同时,网络结构简化,时间和空间都得到了优化,可以跑在嵌入式设备和移动设备上。 相关研究 用CNN进行人脸验证分为三种。一种是使用人脸分类的任务训练CNN提取特征,然后用分类器判断是不是同一个人。第二种是直接优化验证损失。第三种是将人脸识别和验证任务同时进行。本文框架是属于第一种。 网络结构 MFM激活函数相比于Relu的优点,主要是它可以学习紧凑的特征而不是Relu那样稀疏高维的。 本文网络结构如上图所示,和DeepID一样

Keras:在预训练的网络上fine-tune

匿名 (未验证) 提交于 2019-12-03 00:22:01
Keras:自建数据集图像分类的模型训练、保存与恢复 Keras:使用预训练网络的bottleneck特征 fine-tune的三个步骤: 搭建vgg-16并载入权重; 将之前定义的全连接网络加载到模型顶部,并载入权重; 冻结vgg16网络的一部分参数. 在之前的 Keras:自建数据集图像分类的模型训练、保存与恢复 里制作了实验用的数据集并初步进行了训练.然后在 Keras:使用预训练网络的bottleneck特征 中定义并训练了要使用全连接网络,并将网络权重保存到了bottleneck_fc_model.h5文件中. 根据keras中…/keras/applications/vgg16.py的VGG16模型形式,构造VGG16模型的卷积部分,并载入权重(vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5).然后添加预训练好的模型.训练时冻结最后一个卷积块前的卷基层参数. 示例: from keras.models import Sequential from keras import optimizers from keras.preprocessing.image import ImageDataGenerator from keras.layers import Flatten, Dense, Dropout, Conv2D,

MobileNetV2

匿名 (未验证) 提交于 2019-12-03 00:19:01
MobileNetV2: 《Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation》 https://arxiv.org/abs/1801.04381 MobileNetV2是对 MobileNetV1 的改进,同样是一个轻量化卷积神经网络。 1. Inverted residuals,通常的residuals block是先经过一个1*1的Conv layer,把feature map的通道数“压”下来,再经过3*3 Conv layer,最后经过一个1*1 的Conv layer,将feature map 通道数再“扩张”回去。即先“压缩”,最后“扩张”回去。 而 inverted residuals就是 先“扩张”,最后“压缩”。为什么这么做呢?请往下看。 2 .Linear bottlenecks,为了避免Relu对特征的破坏,在residual block的Eltwise sum之前的那个 1*1 Conv 不再采用Relu,为什么?请往下看。 创新点全写在论文标题上了! 由于才疏学浅,对本论文理论部分不太明白,所以选取文中重要结论来说明MobileNet-V2。 先看看MobileNetV2 和 V1之间有啥不同 (

深度学习入门

匿名 (未验证) 提交于 2019-12-03 00:15:02
Deep Learning with Pytorch_002 chapter03_深入研究神经网络的构建块 在上一章中,我们使用Py Torch的低级操作来构建模块,如网络体系结构、损失函数和优化器。在本章中,我们将探讨解决现实世界问题所需的神经网络的一些重要组成部分,以及PyTorch如何通过提供大量的高级函数来抽象出大量的复杂性。 本章将讨论以下主题: 深入研究神经网络的各种构建块 探索PyTorch中的高级功能来构建深度学习体系结构 将深度学习应用在一个真实图像分类问题 任何深入的学习训练都需要获取数据,构建一个总体上是将一堆层聚集在一起的体系结构。 理解PyTorch为构建层、损失函数和优化器提供的更高层次的抽象。 层次――神经网络的基本块 最重要的层之一――线性层 对输入的数据应用线性变换: y = x A T + b y y = xA^T + by y = x A T + b y torch.randn(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor 返回一个由均值为0、方差为1的正态分布(标准正态分布)中的随机数组成的张量。 o u t i N ( 0 , 1 ) o u t i N ( 0 , 1 ) torch.from

常见的激活函数

匿名 (未验证) 提交于 2019-12-02 23:57:01
1,Sigmoid sigmoid 函数映射之后取值范围为(0,1) tanh函数映射之后取值范围(-1,1) Relu函数映射之后取值范围(0,..)大宇等于0 Sigmoid函数的特点是会把输出限定在0~1之间,如果是非常大的负数,输出就是0,如果是非常大的正数,输出就是1,这样使得数据在传递过程中不容易发散。 Sigmod有两个主要缺点,一是Sigmoid容易过饱和,丢失梯度。从Sigmoid的示意图上可以看到,神经元的活跃度在0和1处饱和,梯度接近于0,这样在反向传播时,很容易出现梯度消失的情况,导致训练无法完整;二是Sigmoid的输出均值不是0,基于这两个缺点,SIgmoid使用越来越少了。 2. tanh tanh是Sigmoid函数的变形,tanh的均值是0,在实际应用中有比Sigmoid更好的效果。 3. ReLU ReLU是近来比较流行的激活函数,当输入信号小于0时,输出为0;当输入信号大于0时,输出等于输入。 ReLU的优点: 1. ReLU是部分线性的,并且不会出现过饱和的现象,使用ReLU得到的随机梯度下降法(SGD)的收敛速度比Sigmodi和tanh都快。 2. ReLU只需要一个阈值就可以得到激活值,不需要像Sigmoid一样需要复杂的指数运算。 ReLU的缺点: 在训练的过程中,ReLU神经元比价脆弱容易失去作用

[C1W3] Neural Networks and Deep Learning - Shallow neural networks

匿名 (未验证) 提交于 2019-12-02 23:47:01
神经网络中,我们将使用上标方括号的形式表示这些值来自于哪一层,有趣的是在约定俗成的符号传统中,在这里你所看到的这个例子,只能叫做一个两层的神经网络。原因是输入层是不算入总层数内,所以隐藏层是第一层,输出层是第二层。第二个惯例是我们将输入层称为第零层,所以在技术上,这仍然是一个三层的神经网络,因为这里有输入层、隐藏层,还有输出层。但是在传统的符号使用中,如果你阅读研究论文或者在这门课中,你会看到人们将这个神经网络称为一个两层的神经网络,因为我们不将输入层看作一个标准的层。 单个样本时,向量化图示 单个样本时,运用四行代码计算出一个简单神经网络的输出(预测)。 上一节使用的是单个样本,如果把单个样本的向量横向堆叠成矩阵,就可以计算全部样本的神经网络输出(预测)。 Pros and cons of activation functions 结果表明,如果在隐藏层上使用 tanh (双曲正切)函数效果总是优于 sigmoid 函数。因为函数值域在 -1 和 +1 的激活函数,其均值是更接近 0 均值的,而不是0.5,这会使下一层学习简单一点。 在讨论优化算法时,有一点要说明:我基本已经不用 sigmoid 激活函数了,tanh 函数在所有场合都优于 sigmoid 函数。 但有一个例外:在二分类的问题中,对于输出层,想让的数值介于 0 和 1 之间,而不是在 -1 和 +1 之间

keras中激活函数的使用

匿名 (未验证) 提交于 2019-12-02 23:42:01
两种方式: 一、通过keras封装的网络层中的activation参数指定: 例如,下面的卷积层中的指定的激活函数为ReLU函数: from keras.model import Sequential from keras.layers import Conv2D from keras.layers import MaxPooling2D model = Sequential() model.add(Conv2D( kernel_size=(9,9), activation="relu", filters=48, strides=(4,4), input_shape = input_shape)) model.add(MaxPooling2D((3,3), strides=(2,2), padding='same')) model.add(Conv2D( strides=(1,1), kernel_size=(3,3), activation="relu", filters=128)) model.add(Conv2D( strides=(1,1), kernel_size=(3,3), activation="relu", filters=128)) model.add(MaxPooling2D((3,3), strides=(2,2), padding='same')) 二

DNN

匿名 (未验证) 提交于 2019-12-02 23:38:02
构建图阶段 构建神经网络层 构建计算图 计算图阶段 import tensorflow as tf from tensorflow . examples . tutorials . mnist import input_data import numpy as np from tensorflow . contrib . layers import fully_connected 构建图阶段 # 构建图阶段 n_inputs = 28 * 28 n_hidden1 = 300 n_hidden2 = 100 n_outputs = 10 X = tf . placeholder ( tf . float32 , shape = ( None , n_inputs ) , name = 'X' ) y = tf . placeholder ( tf . int64 , shape = ( None ) , name = 'y' ) 构建神经网络层 # 构建神经网络层,我们这里两个隐藏层,基本一样,除了输入 inputs 到每个神经元的连接不同 # 和神经元个数不同 # 输出层也非常相似,只是激活函数从 ReLU 变成了 Softmax 而已 # 将构造多层神经网络的函数封装一下 def neuron_layer ( X , n_neurons , name , activation