relu

tf.keras inception_resnet_v1

左心房为你撑大大i 提交于 2019-12-09 12:31:47
inception_resnet_v1代码 import os os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID" os.environ["CUDA_VISIBLE_DEVICES"]="3" import keras import numpy as np import math from tensorflow.python.keras.datasets import cifar10 from tensorflow.python.keras.layers import Conv2D, MaxPooling2D, AveragePooling2D, ZeroPadding2D, GlobalAveragePooling2D from tensorflow.python.keras.layers import Flatten, Dense, Dropout,BatchNormalization,Activation, Convolution2D, add from tensorflow.python.keras.layers import Convolution2D from tensorflow.python.keras.models import Model from tensorflow.python.keras.layers import

论文笔记(一)SecureML: A System for Scalable Privacy-Preserving Machine Learning

风格不统一 提交于 2019-12-08 20:57:38
SecureML:A system for Scalable Privacy-Preserving Machine Learning 1 摘要及介绍 1.1 模型的大致架构 首先,主要模型中主要有客户端和两台服务器,假设这两台服务器不会恶意合作。   整个训练过程大致分为在线和离线两个阶段,在线阶段的主要任务就是利用本文提出的安全算数技术在共享的十进制数上进行模型的更新,根据混淆电路的思想,除了最后能得到的模型,什么数据也不会暴露出来;离线阶段的主要任务是服务于在线阶段的乘法运算——利用线性同态加密或者不经意传输生成必要的三元组,因为这个开销比较大,后期还提出了一种改进,用客户端来辅助生成三元组; 1.2 主要贡献 为线性回归、逻辑回归、神经网络这三种机器学习算法开发出了新型的隐私保护的深度学习协议 开发出了支持在共享的十进制数上的安全算数操作的技术 对于那些非线性激活函数,如sigmoid softmax,提出了一种支持安全多方计算的替代方案 以上提出的所有技术相较于目前的技术,在保证安全的前提下,速度上都有很大的提升 1.2.1 为三种机器学习算法开发出的隐私保护的协议 线性回归、逻辑回归和神经网络这三种机器学习方案非常简单但也非常常用,而且他们之间思想类似且一种递进的趋势。 所谓思想类似指的是他们都是有监督的机器学习算法,思路都是先前馈,算出交叉熵之后,在利用随机梯度下降

动手学PyTorch | (6) 多层感知机

谁都会走 提交于 2019-12-08 14:54:53
我们已经介绍了包括线性回归和softmax回归在内的单层神经⽹络。然⽽深度学习主要关注多层模型。在本节中,我们将以多层感知机(multilayer perceptron,MLP)为例,介绍多层神经网络的概念。 目录 1. 隐藏层 2. 激活函数 3. 多层感知机 4. 小结 1. 隐藏层 多层感知机在单层神经⽹络的基础上引⼊了一到多个隐藏层(hidden layer)。隐藏层位于输⼊层和输出层之间。下图展示了⼀个多层感知机的神经⽹络图,它含有⼀个隐藏层,该层中有5个隐藏单元。 在上图所示的多层感知机中,输⼊和输出个数分别为4和3,中间的隐藏层中包含了5个隐藏单元 (hidden unit)。由于输入层不涉及计算,图3.3中的多层感知机的层数为2。由上图可见,隐藏层中的神经元和输⼊层中各个输⼊完全连接,输出层中的神经元和隐藏层中的各个神经元也完全连接。因此,多层感知机中的隐藏层和输出层都是全连接层。 具体来说,给定⼀个⼩批量样本 ,其批量大小维n,输入个数为d。假设多层感知机只有⼀个隐藏层,其中隐藏单元个数为h。记隐藏层的输出(也称为隐藏层变量或隐藏变量)为H,有 。因为隐藏层和输出层均是全连接层,可以设隐藏层的权􏰀重参数和偏差参数分别为 ,输出层的权􏰀重和偏差参数分别为 。 我们先来看一种含单隐藏层的多层感知机的设计。其输出 的计算为: 也就是将隐藏层的输出直接作为输出层的输入

Python绘制不同激活函数图像

一曲冷凌霜 提交于 2019-12-07 18:31:24
1 """ 2 功能:Python绘制不同激活函数图像 3 姓名:侯俊龙 4 日期:2019/12/07 5 """ 6 7 import matplotlib.pyplot as plt 8 import numpy as np 9 10 x = np.linspace(-10,10) 11 # 绘制sigmoid图像 12 fig = plt.figure() 13 y_sigmoid = 1/(1+np.exp(-x)) 14 ax = fig.add_subplot(221) 15 ax.plot(x,y_sigmoid) 16 ax.grid() 17 ax.set_title('(a) Sigmoid') 18 19 # 绘制Tanh图像 20 ax = fig.add_subplot(222) 21 y_tanh = (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x)) 22 ax.plot(x,y_tanh) 23 ax.grid() 24 ax.set_title('(b) Tanh') 25 26 # 绘制Relu图像 27 ax = fig.add_subplot(223) 28 y_relu = np.array([0*item if item<0 else item for item in x ]) 29 ax

卷积神经网络基础

落花浮王杯 提交于 2019-12-06 14:58:49
https://www.cnblogs.com/wj-1314/p/9754072.html 激活函数:常用的激活函数有sigmoid、tanh、relu等等,前两者sigmoid/tanh比较常见于全连接层,后者ReLU常见于卷积层 在卷积神经网络中,激活函数一般用ReLU(The Rectified Linear Unit,修正线性单元) 收敛快,求梯度简单。 计max(0,T),就是如果这个数是正的就原样输出,如果这个数是负数,就输出0 深度神经网络: 卷积、激活函数、池化组合在一起,是下面这样: 然后多经过几次这个过程就是深度神经网络 全连接层(Fully connected layers): 全连接层在整个卷积神经网络中是个分类器,在通过卷积、激活函数、池化等深度网络后,再经过全连接层对结果进行识别分类。 首先将经过卷积、激活函数、池化的深度网络后的结果串起来,如下图所示: 在利用该模型进行结果识别时,根据刚才提到的模型训练得出来的权重,以及经过前面的卷积、激活函数、池化等深度网络计算出来的结果,进行加权求和,得到各个结果的预测值,然后取值最大的作为识别的结果(如下图,最后计算出来字母X的识别值为0.92,字母O的识别值为0.51,则结果判定为X) 卷积神经网络主要由两部分组成,一部分是特征提取(卷积、激活函数、池化),另一部分是分类识别(全连接层)

关于梯度爆炸和梯度消失的详解(转载)

假装没事ソ 提交于 2019-12-06 14:30:40
转载链接: https://www.jianshu.com/p/3f35e555d5ba 1.为什么使用梯度下降来优化神经网络参数? 反向传播(用于优化神网参数) :根据损失函数计算的误差通过反向传播的方式,指导深度网络参数的更新优化。 采取反向传播的原因:首先,深层网络由许多线性层和非线性层堆叠而来,每一层非线性层都可以视为是一个非线性函数 (非线性来自于非线性激活函数),因此整个深度网络可以视为是一个复合的非线性多元函数。 我们最终的目的是希望这个非线性函数很好的完成输入到输出之间的映射,也就是找到让损失函数取得极小值。所以最终的问题就变成了一个寻找函数最小值的问题,在数学上,很自然的就会想到使用梯度下降来解决。 2.梯度消失、爆炸会带来哪些影响 举个例子,对于一个含有三层隐藏层的简单神经网络来说, 当梯度消失发生时,接近于输出层的隐藏层由于其梯度相对正常,所以权值更新时也就相对正常,但是当越靠近输入层时,由于梯度消失现象,会导致靠近输入层的隐藏层权值更新缓慢或者更新停滞。这就导致在训练时,只等价于后面几层的浅层网络的学习。 3.产生的原因 以最简单的网络结构为例,假如有三个隐藏层,每层的神经元个数都是1,且对应的非线性函数为 (其中 为某个激活函数)如下图: 现在假设我们需要更新参数 ,那么我们就要求出损失函数对参数 的导数 而对于激活函数,之前一直使用Sigmoid函数

Batch Normalization详解

穿精又带淫゛_ 提交于 2019-12-06 14:23:34
目录 动机 单层视角 多层视角 什么是Batch Normalization Batch Normalization的反向传播 Batch Normalization的预测阶段 Batch Normalization的作用 几个问题 卷积层如何使用BatchNorm? 没有scale and shift过程可不可以? BN层放在ReLU前面还是后面? BN层为什么有效? 参考 博客: blog.shinelee.me | 博客园 | CSDN 动机 在博文《 为什么要做特征归一化/标准化? 博客园 | csdn | blog 》中,我们介绍了对输入进行Standardization后,梯度下降算法更容易选择到合适的(较大的)学习率,下降过程会更加稳定。 在博文《 网络权重初始化方法总结(下):Lecun、Xavier与He Kaiming 博客园 | csdn | blog 》中,我们介绍了如何通过权重初始化让网络在训练之初保持激活层的输出(输入)为zero mean unit variance分布,以减轻梯度消失和梯度爆炸。 但在训练过程中,权重在不断更新,导致激活层输出(输入)的分布会一直变化,可能无法一直保持zero mean unit variance分布,还是有梯度消失和梯度爆炸的可能,直觉上感到,这可能是个问题。下面具体分析。 单层视角 神经网络可以看成是上图形式

《Neural Networks and Deep Learning》课程笔记

旧街凉风 提交于 2019-12-06 10:31:02
Lesson 1 Neural Network and Deep Learning 这篇文章其实是 Coursera 上吴恩达老师的深度学习专业课程的第一门课程的课程笔记。 参考了其他人的笔记继续归纳的。 逻辑回归 (Logistic Regression) 逻辑回归的定义 神经网络的训练过程可以分为 前向传播(forward propagation) 和 反向传播 (backward propagation) 的 过程。我们通过逻辑回归的例子进行说明。 逻辑回归是一个用于 二分类 (binary clasification) 的算法。比如说,我们有一张图片作为输入,比如下图中的猫,如果识别这张图片为猫,则输出标签1作为结果;如果识别出不是猫,那么输出标签0作为结果。而我们把输出结果用 \(y\) 表示就如下图所示。 图片在计算机中保存的话,我们需要保存三个矩阵,它们分别对应图片中的红、绿、蓝三种颜色通道。如果图片是 \(64\times64\) 像素的,那么这三个矩阵的大小都是 \(64\times64\) 。 为了把这张图片的像素值转换为特征向量 \(x\) ,我们需要把三个矩阵展开为一个向量,而这个向量的总维度用 \(n_x\) 表示的话,就是 \(n_x=3\times64\times64=12,288\) 。 符号定义: \(x\) :表示一个 \(n_x\) 维数据

SSD Keras版源码史上最详细解读系列之模型源码解析

孤街醉人 提交于 2019-12-06 01:40:24
SSD Keras版源码史上最详细解读系列之模型源码解析 模型源码keras_ssd300.py解析 模型源码keras_ssd300.py解析 因为前面训练和测试的模型是用 ssd300 的,所以这次就解析这个模型,至于其他的都是差不多的,原理一样的,我们先来看看这个文件 keras_ssd300.py : 其实里面是定义了ssd300的一个方法来获取模型: def ssd_300(image_size, n_classes, mode='training', l2_regularization=0.0005, min_scale=None, max_scale=None, scales=None, aspect_ratios_global=None, # 4 6 6 6 4 4 有1的会增加一个框 aspect_ratios_per_layer=[[1.0, 2.0, 0.5], [1.0, 2.0, 0.5, 3.0, 1.0/3.0], [1.0, 2.0, 0.5, 3.0, 1.0/3.0], [1.0, 2.0, 0.5, 3.0, 1.0/3.0], [1.0, 2.0, 0.5], [1.0, 2.0, 0.5]], two_boxes_for_ar1=True, steps=[8, 16, 32, 64, 100, 300], offsets=None,

ReLU derivative with NumPy

懵懂的女人 提交于 2019-12-06 00:18:29
import numpy as np def relu(z): return np.maximum(0,z) def d_relu(z): z[z>0]=1 z[z<=0]=0 return z x=np.array([5,1,-4,0]) y=relu(x) z=d_relu(y) print("y = {}".format(y)) print("z = {}".format(z)) The code above prints out: y = [1 1 0 0] z = [1 1 0 0] instead of y = [5 1 0 0] z = [1 1 0 0] From what I understand the function calls I've used should only be doing passing by value,passing a copy of the variable. Why is my d_relu function affecting the y variable? Your first mistake is in assuming python passes objects by value... it doesn't - it's pass by assignment (similar to passing by reference