relu

模型蒸馏(Distil)及mnist实践

假如想象 提交于 2019-12-05 23:44:21
结论:蒸馏是个好方法。 模型压缩/蒸馏在论文《Model Compression》及《Distilling the Knowledge in a Neural Network》提及,下面介绍后者及使用keras测试mnist数据集。 蒸馏:使用小模型模拟大模型的泛性。 通常,我们训练mnist时,target是分类标签,在蒸馏模型时,使用的是教师模型的输出概率分布作为“soft target”。也即损失为学生网络与教师网络输出的交叉熵(这里采用DistilBert论文中的策略,此论文不同)。 当训练好教师网络后,我们可以不再需要分类标签,只需要比较2个网络的输出概率分布。当然可以在损失里再加上学生网络的分类损失,论文也提到可以进一步优化。 如图,将softmax公式稍微变换一下,目的是使得输出更小,softmax后就更为平滑。 论文的损失定义 本文代码使用的损失为p和q的交叉熵 代码测试部分 1,教师网络,测试精度99.46%,已经相当好了,可训练参数858,618。 # 教师网络 inputs=Input((28,28,1)) x=Conv2D(64,3)(inputs) x=BatchNormalization(center=True,scale=False)(x) x=Activation('relu')(x) x=Conv2D(64,3,strides=2)(x) x

Pytorch入门学习(五)---- 示例讲解Tensor, Autograd, nn.module

若如初见. 提交于 2019-12-05 21:59:06
提示:我觉得大部分的人可以直接看 文章最后 ,你觉得呢? Tensors 虽然python有Numpy这样的框架,但Numpy是不支持GPU的。Pytorch的主要两个特性就是:N维Tensor以及自动求导。 两层网络模型,单纯用Tensor实现: # -*- coding: utf-8 -*- import torch dtype = torch.FloatTensor # dtype = torch.cuda.FloatTensor # Uncomment this to run on GPU # N is batch size; D_in is input dimension; # H is hidden dimension; D_out is output dimension. N, D_in, H, D_out = 64 , 1000 , 100 , 10 # Create random input and output data x = torch.randn(N, D_in).type(dtype) y = torch.randn(N, D_out).type(dtype) # Randomly initialize weights w1 = torch.randn(D_in, H).type(dtype) w2 = torch.randn(H, D_out)

[转载] ReLU和BN层简析

眉间皱痕 提交于 2019-12-05 20:45:55
[转载] ReLU和BN层简析 来源: https://blog.csdn.net/huang_nansen/article/details/86619108 卷积神经网络中,若不采用非线性激活,会导致神经网络只能拟合线性可分的数据,因此通常会在卷积操作后,添加非线性激活单元,其中包括logistic-sigmoid、tanh-sigmoid、ReLU等。 sigmoid激活函数应用于深度神经网络中,存在一定的局限性,当数据落在左右饱和区间时,会导致导数接近0,在卷积神经网络反向传播中,每层都需要乘上激活函数的导数,由于导数太小,这样经过几次传播后,靠前的网络层中的权重很难得到很好的更新,这就是常见的梯度消失问题。这也是ReLU被使用于深度神经网络中的一个重要原因。 Dead ReLU 若数据落在负区间中,ReLU的结果为0,导数也是0,就会导致反向传播无法将误差传递到这个神经元上,这会导致该神经元永远不会被激活,导致Dead ReLU问题。 解决方法: 1)Leraning Rate 导致Dead ReLU问题的其中一个潜在因素为Learning Rate太大,假设在某次更新中,误差非常大,这时候若LR也很大,会导致权重参数更新后,神经元的数据变化剧烈,若该层中多数神经元的输出向负区间偏向很大,导致了大部分权重无法更新,会陷入Dead ReLU问题中。 当然,小learning

激活函数

爷,独闯天下 提交于 2019-12-05 11:35:55
常用激活函数及其导数 Sigmoid函数 形式 \[f(z)=\frac{1}{1+\exp(-z)}\] 导数 \[f^{'}(z)=f(z)(1-f(z))\] Tanh激活函数 形式 \[f(z)=tanh(z)=\frac{e^z - e^{-z}}{e^z + e^{-z}}\] 导数 \[f^{'}(z)=1-(f(z))^2\] ReLU激活函数 形式 \[f(z) = \max(0, z)\] 导数:略 GTU激活函数 形式 \[f(X) = tanh(X \cdot W+b)\cdot \sigma(X \cdot V+c)\] 结构:tanh激活单元+sigmoid激活单元 存在梯度消失问题 GLU激活函数 形式 \[f(X) = (X\cdot W+b) \cdot \sigma(X \cdot V+c)\] 结构:ReLU激活单元+sigmoid激活单元 不会存在梯度消失问题 SELU (scaled exponential linear units)激活函数 形式 \[\begin{aligned} \text{selu}(z) = \lambda \begin{cases} z \quad &\text{if} \ z > 0 \\ \alpha e^z - \alpha \quad &\text{if} \ z \le 0 \end{cases}

[GAN01]GAN原理介绍并使用Keras实现DCGAN基于Mnist数据集的图像生成

别等时光非礼了梦想. 提交于 2019-12-05 09:55:15
前言 打算开坑实现一系列GAN,并基于这些模型对GAN的原理进行深入理解与挖掘。 第一篇是DCGAN。 理论部分 GAN的原理 从图中可以看到,GAN分为两部分,生成器和辨别器。 生成器与辨别器 生成器的目的是利用噪音生成以假乱真的图片,因此,其输入是无意义的噪音,输出是利用该噪音生成的图片。 辨别器的目的是区分出生成器生成的图片与真正的图片,因此,其输入是两种图片,输出是两种图片对应的种类(fake or real)。 生成器是如何利用噪音生成图片的? 我们希望生成的图片可以看作在空间中按照一定概率密度Pd(x)分布的高维张量。 注意这个概率分布不能简单的理解为X∈(长,宽,通道),y∈[0,1]的一个概率分布,我们学习到的是一种更为高维与复杂的分布,它至少包含了一部分像素之间的关系(因为用到了超过1*1的卷积核)。 如果用能够用概率函数Pg(x)拟合出这个高维分布,就能够利用噪音生成所需图片,至于如何拟合有两种思路。 一是自编码器(Auto Encoder)和变分编码器(VAE)的思路,个人认为这种思路的本质就是在做极大似然拟合,也就是说,通过采样,让样本点出现概率最大来调整参数,最终对真正分布进行拟合。李宏毅讲,因为只是根据pd(x)与pg(x)之间的距离进行调整,所以这种做法的问题是生成器比较死板,即使是距离相同的分布,可能实际效果是大不相同的。 二是对抗生成神经网络

深度卷积生成式对抗网络(Deep Convolutional Generative Adversarial, DCGAN)

不打扰是莪最后的温柔 提交于 2019-12-05 09:32:36
深度卷积生成式对抗网络,2019-03-26 目录 一、预备知识 (一)卷积神经网络 1. 层级结构 2. 训练算法 3. 优缺点 (二)GAN 二、模型结构 (一)模型总体思想 (二)对CNN的改进 1. 全卷积网络 2. 消除完全连接层 3. 批规范化 (二)DCGAN框架结构 三、实验 (一)实验数据集 (二)实验细节 1. 预处理 2. 参数设置 3. 正式实验 (1) 在数据集LSUN上进行实验 (2)在人脸数据集上进行实验 (3)在数据集Imagenet-1K上进行实验 四、对DCGAN能力的实验验证 (一)使用GANs作为特征提取器对CIFAR-10进行分类 (二)使用GANs作为特征提取器对SVHN数字进行分类 五、研究和可视化网络的内部结构 (一)潜在空间 (二)可视化判别器特性 (三)操作生成器的表示 1. 忘记绘制某些对象 2. 人脸样本向量算法 六、总结和展望 论文链接:https://arxiv.org/abs/1511.06434 目录 一、预备知识 (一)卷积神经网络 参考博文: https://www.cnblogs.com/skyfsm/p/6790245.html 1. 层级结构 数据输入层/Input Layer:主要是数据预处理(去均值、归一化、 PCA / 白化 等); 卷积计算层/CONV Layer:局部关联、窗口滑动(特征提取);

基于Keras框架对抗神经网络DCGAN实践

时光毁灭记忆、已成空白 提交于 2019-12-05 09:29:51
1. 前言 金庸小说《射雕英雄传》中,周伯通被东邪“黄药师”困在桃花岛的地洞里。为了打发时间,周伯通就用左手与右手打架,自娱自乐。其武功决窍在于要先“左手画圆、右手画方”,分心二用,保证可以同时使出两种武功,从而使得武力倍增。 于是,一位名叫伊恩·古德费洛的美国人在2014年加拿大蒙特利尔大学读博士的时候想了这样一个方案,也就是说,在两个神经网络中进行“猫和鼠游戏”,一个不断地“造假”,一个不断“验真”,彼此相互追逐,在对抗中不断提高自身的本领。    常见的应用场景: 数据生成——解决数据缺失 在特定的应用场景下,例如医疗领域、能源行业工业化生产,缺少训练数据是应用深度学习的最大障碍。数据增强的传统做法是将原图像拉伸旋转剪切,但这毕竟还是原来的图像,通过使用GAN,能够生成更多类似的数据。 图像编辑 图像编辑好比“美图秀秀”软件中的各种滤镜的升级版,给出一张原始的妹子图片,可以生成出金发版,卷发版,微笑版,还能修改图片中的环境因素。 恶意攻击检测 通过给深度神经网络一些特异生产的训练数据,深度学习生成的模型是可以被黑客攻击,利用甚至控制的。为了对抗这样的逆向攻击(adversarialattacks),可以训练对抗神经网络去生成更多的虚假训练数据作为假想敌,让模型在演习中去识别出这些虚假数据,就如同人类打疫苗,GAN生成的虚假数据让正在做分类的模型更加稳健。 注意力预测

对抗生成网络及代码实例

…衆ロ難τιáo~ 提交于 2019-12-05 09:28:23
1 概述 Gererative Adversarial Networks最早由Goodfellow Ian在2014年发表论文提出。论文地址: https://arxiv.org/abs/1406.2661 。 定义: 由两个相互博弈的神经网络组成的判别-生成模型。两个神经网络一个是生成网络G,一个是判别网络D。博弈的目的是使生成网络生成的数据更真,判别网络判别能力越强。通俗理解就是最小化生成网络生成的数据和真实数据集的概率分布,最大化判别网络的区分度。GAN属于无监督学习。 概念理解小例子: 假币和真币 犯罪分子造假币,是G。银行判别假币,是D 真的标签为1,假的标签为0,我们要做的是: 当输入D的人民币为真的时候,就打上标签1 当输入D的人民币为假的时候,就打上标签0 G生成的人民币,输入到D中,希望打上标签1 应用: GAN有广泛的应用,它可以用来生成以假乱真的图片,也可以生成视频,三维物体模型等。并且已经有人把它应用到NLP上了。论文地址: https://arxiv.org/pdf/1609.05473.pdf 2 组成 2.1 G网络 输入和输出: 是噪音数据,输出是我们想要的分布数据,比如一张人脸图片的数据。 策略: G网络的训练策略是让D(G(z))趋近于1。 损失函数: 是ln(1-D(G(z))),训练目的是希望D(G(z))趋近于1。这样G的loss就会最小

用Tensorflow实现DCGAN

早过忘川 提交于 2019-12-05 09:16:15
1. GAN简介 最近几年,深度神经网络在图像识别、语音识别以及自然语言处理方面的应用有了爆炸式的增长,并且都达到了极高的准确率,某些方面甚至超过了人类的表现。然而人类的能力远超出图像识别和语音识别的任务,像很多需要创造力的任务却是机器很难做到的。但是GAN使得机器解决这些任务成为可能。 深度学习的领军人物Yann LeCun曾经说过: 生成对抗网络(GAN)及其变种已经成为最近10年以来机器学习领域最重要的思想。 为了能更好的了解GAN,做一个比喻, 想象一下制作伪钞的犯罪嫌疑人和警察这个现实中的例子: 想要成为一名成功的假钞制作者,犯罪嫌疑人需要蒙骗得了警察,使得警察无法区分出哪一张是假钞、哪一张是真钞。 作为警察,需要尽可能高效地发现那些是假钞 整个过程被称为 对抗性过程(adversarial process) GAN是由Ian Goodfellow 于2014年提出,它是一种两个神经网络相互竞争的特殊对抗过程。第一个网络生成数据,第二个网络试图区分真实数据与第一个网络创造出来的假数据。第二个网络会生成一个在[0, 1]范围内的标量,代表数据是真是数据的概率。 2.GAN的目的 GAN是生成模型的一种,主要在模型的分布中生成样本,它只能够制造数据而不是提供一个预测的密度函数。 下面是一些学习生成模型的理由: 生成样本,这是最直接的理由。 训练并不包含最大似然估计。

使用keras训练mnist数据集

眉间皱痕 提交于 2019-12-05 08:55:16
文章组织结构 本文使用不同的网络结构来训练mnist,从中了解一些问题 使用keras 序贯模型实现简单的mnist识别,正确率约为90% 更换loss函数,更换优化器来获得更好效果,正确率约为 97% 使用卷积层来替换Dense层,正确率达到99% 使用VGG16网络,正确率达到了97.4% 经验教训 原始代码 (转载自 https://www.cnblogs.com/LHWorldBlog/p/8677131.html) #=================== Test 1 Hello Keras for mnist============================================================================== # 这是一个简单的全连接神经网络的例子。 from keras . models import Sequential # 采用贯序模型 from keras . layers import Input , Dense , Dropout , Activation from keras . models import Model from keras . optimizers import SGD from keras . datasets import mnist import numpy as np