relu

数字识别,神经网络

元气小坏坏 提交于 2019-12-02 23:29:07
来源:https://www.numpy.org.cn/deep/basics/fit_a_line.html 数字识别 本教程源代码目录在 book/recognize_digits ,初次使用请您参考 Book文档使用说明 。 # 说明: 硬件环境要求: 本文可支持在CPU、GPU下运行 Docker镜像支持的CUDA/cuDNN版本: 如果使用了Docker运行Book,请注意:这里所提供的默认镜像的GPU环境为 CUDA 8/cuDNN 5,对于NVIDIA Tesla V100等要求CUDA 9的 GPU,使用该镜像可能会运行失败。 文档和脚本中代码的一致性问题: 请注意:为使本文更加易读易用,我们拆分、调整了train.py的代码并放入本文。本文中代码与train.py的运行结果一致,可直接运行 train.py 进行验证。 # 背景介绍 当我们学习编程的时候,编写的第一个程序一般是实现打印"Hello World"。而机器学习(或深度学习)的入门教程,一般都是 MNIST 数据库上的手写识别问题。原因是手写识别属于典型的图像分类问题,比较简单,同时MNIST数据集也很完备。MNIST数据集作为一个简单的计算机视觉数据集,包含一系列如图1所示的手写数字图片和对应的标签。图片是28x28的像素矩阵,标签则对应着0~9的10个数字。每张图片都经过了大小归一化和居中处理。

MLCC笔记14 - 神经网络简介 (Introduction to Neural Networks)

匿名 (未验证) 提交于 2019-12-02 23:05:13
原文链接: https://developers.google.com/machine-learning/crash-course/introduction-to-neural-networks/ 神经网络 是更复杂版本的特征组合。实质上,神经网络会学习适合相应特征组合。 1- 剖析 “非线性问题”意味着无法使用形式为“$b + w_1x_1 + w_2x_2$”的线性模型准确预测标签。 对非线性问题可以用特征组合的方法进行建模。 隐藏层 “隐藏层”表示中间值。 如果构建一个多层模型,“隐藏层”每个节点是上一层输入节点值的加权和,输出是“隐藏层”节点的加权和,那么此模型仍是线性的。 因为当将输出表示为输入的函数并进行简化时,只是获得输入的另一个加权和而已。 激活函数 要对非线性问题进行建模,可以直接引入非线性函数。 可以用非线性函数将每个隐藏层节点像管道一样连接起来。 在隐藏层中的各个节点的值传递到下一层进行加权求和之前,采用一个非线性函数对其进行了转换,这种非线性函数称为激活函数。 通过在非线性上堆叠非线性,能够对输入和预测输出之间极其复杂的关系进行建模。 简而言之,每一层均可通过原始输入有效学习更复杂、更高级别的函数。 常见激活函数 S型激活函数 S型激活函数将加权和转换为介于 0 和 1 之间的值。 S 型函数的响应性在两端相对较快地减少。 公式: 曲线图:

Hands On Machine Learning with Scikit Learn and TensorFlow(第十一章)

匿名 (未验证) 提交于 2019-12-02 22:56:40
Vanishing/Exploding Gradients Problems 梯度消失 的定义:在反向传播过程中,梯度的值会越来越小,这样导致:使用梯度下降更新参数时,更新的参数基本没有变,训练也不会收敛,无法达到最优解。 梯度爆炸 的定义:在反向传播过程中,梯度的值越来越大,这样导致:权重很大,造成算法发散,在RNN中常见。 Xavier and He Initialization 我们不想让信号消失,也不想让信号过大或者饱和。为了让信号正确的流动,信号不管在前向传播还是反向传播过程中,都需要使输入时的方差等于输出时的方差。不可能同时保证这样,除非这一层的输入和输出的连接相等。在实际中,我们使用Xavier初始化权重也能达到满意的效果。n为输入的数量。 he_init = tf.contrib.layers.variance_scaling_initializer() hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu, kernel_initializer=he_init, name="hidden1") He初始化不像Xavier初始化一样考虑输入和输出的数量,He只考虑输入的数量。 Nonsaturating Activation Functions Leaky ReLU基本好过普通的ReLU

深度学习python之keras的一些tips(持续更新……)

匿名 (未验证) 提交于 2019-12-02 22:54:36
一、加载.h5文件 from keras.models import load_model model = load_model('***.h5') model.summary 二、keras functional API 简介 from keras.models import Sequential, Model from keras import layers from keras import Input #sequenti model seq_model = Sequential() seq_model.add(layers.Dense(32, activation='relu', input_shape=(64,))) seq_model.add(layers.Dense(32, activation='relu')) seq_model.add(layers.Dense(10, activation='softmax')) #API input_tensor = Input(shape=(64,)) x = layers.Dense(32, activation='relu')(input_tensor) x = layers.Dense(32, activation='relu')(x) output_tensor = layers.Dense(10,

资深程序员带你玩转深度学习中的正则化技术(附Python代码)!

匿名 (未验证) 提交于 2019-12-02 22:51:30
Ŀ¼ 1. 什么是正则化? 2. 正则化如何减少过拟合? 3. 深度学习中的各种正则化技术: L2和L1正则化 Dropout 数据增强(Data augmentation) 提前停止(Early stopping) 4. 案例:在MNIST数据集上使用Keras的案例研究 1. 什么是正则化? 在深入该主题之前,先来看看这几幅图: 之前见过这幅图吗?从左到右看,我们的模型从训练集的噪音数据中学习了过多的细节,最终导致模型在未知数据上的性能不好。 换句话说,从左向右,模型的复杂度在增加以至于训练误差减少,然而测试误差未必减少。如下图所示: 2. 正则化如何减少过拟合? 我们来看一个在训练数据上过拟合的神经网络,如下图所示: 如果你曾经学习过机器学习中的正则化,你会有一个概念,即正则化惩罚了系数。在深度学习中,它实际上惩罚了节点的权重矩阵。 假设我们的正则化系数很高,以至于某些权重矩阵近乎于0: 这会得到一个简单的线性网络,而且在训练数据集上轻微的欠拟合。 如此大的正则化系数并不是那么有用。我们需要对其进行优化从而得到一个拟合良好的模型,正如下图所示: 这里,lambda是正则参数。它是一个超参数用来优化得到更好的结果。L2正则化也叫权重衰减(weight decay ) ,因 为 它 强 制 权 重朝着 0 衰减(但不会 为 0) 在L1中,我 们 有: dropout做什么呢

Unet源码+keras2.24+python 3.6.5

匿名 (未验证) 提交于 2019-12-02 22:51:30
from keras.models import Model import keras from keras.utils import plot_model from keras.layers import Activation, Dropout, UpSampling2D, concatenate, Input from keras.layers import Conv2DTranspose, Conv2D, MaxPooling2D from PIL import Image import numpy as np import pickle import cv2 import os import tensorflow as tf from keras import layers from sklearn.utils import shuffle from sklearn.model_selection import train_test_split from keras.models import load_model Import necessary items from Keras from keras.layers.normalization import BatchNormalization from keras.preprocessing.image import

pytorch-04-激活函数

試著忘記壹切 提交于 2019-12-02 16:39:06
sigmoid函数:越大的负数越接近0,越大的正数越接近1缺点:(1)造成梯度消失:该函数在靠近1和0的两端,梯度几乎变成0,梯度下降法:梯度乘上学习率来更新参数,如果梯度接近0,那么没有任何信息来更新参数,会造成模型不收敛另外,使用sigmoid函数,在初始化权重时,权重太大,经过激活函数会导致大多数神经元变得饱和,没有办法更新参数(2)sigmoid输出不是以0为均值,这就会导致经过sigmoid激活函数之后的输出,作为后面一层网络的输入的时候是非0均值的,这个时候如果进入下一层神经元的时候全是正的,这就会导致梯度全是正的,那么在更新梯度的时候永远都是正梯度。(详解)p52Tanh激活函数:将输入的数据转换到-1到1之间,输出变成了0均值,解决了sigmoid的第二个问题。但是,仍然存在梯度消失的问题Relu函数优点:(1)相比sigmoid函数和Tanh激活函数,Relu激活函数能够极大的加速随机梯度下降的收敛速度,线性,不存在梯度消失问题。(2)计算简单,只需要一个阈值过滤就可以得到结果,不需要进行一大堆复杂的运算。缺点:训练时脆弱,比如一个很大的梯度经过Relu激活函数,更新参数后,会使这个神经元不会对任何数据有激活现象。如果发生这个情况之后,经过relu的梯度永远都是0,参数无法更新,因为Relu激活函数本质上是一个不可逆的过程,因为它会直接去掉输入小于0的部分

深度学习入门

谁说我不能喝 提交于 2019-12-02 14:50:43
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 ) out i ∼N(0,1) o u t i ∼ N ( 0 ,

创建网络—tensorflow2.0学习

允我心安 提交于 2019-12-02 11:02:56
创建网络 # 编码器网络和自编码器网络 #keras.Input详解参考链接 #https://www.w3cschool.cn/tensorflow_python/tensorflow_python-63xs2s6r.html encode_input = keras . Input ( shape = ( 28 , 28 , 1 ) , name = 'img' ) h1 = layers . Conv2D ( 16 , 3 , activation = 'relu' ) ( encode_input ) h1 = layers . Conv2D ( 32 , 3 , activation = 'relu' ) ( h1 ) h1 = layers . MaxPool2D ( 3 ) ( h1 ) h1 = layers . Conv2D ( 32 , 3 , activation = 'relu' ) ( h1 ) h1 = layers . Conv2D ( 16 , 3 , activation = 'relu' ) ( h1 ) encode_output = layers . GlobalMaxPool2D ( ) ( h1 ) #构建encode的model encode_model = keras . Model ( inputs = encode_input ,

pytorch常用函数

不羁的心 提交于 2019-12-02 10:43:24
总体介绍 https://pytorch.org/docs/stable/torch.html https://pytorch.apachecn.org/docs/1.2/torch.html nn 实现了神经网络中大多数的损失函数,例如 nn.MSELoss 用来计算均方误差, nn.CrossEntropyLoss 用来计算交叉熵损失。 nn.Module 是 nn 中最重要的类,可把它看成是一个网络的封装,包含网络各层定义以及forward方法,调用forward(input)方法,可返回前向传播的结果。定义网络时,需要继承 nn.Module ,并实现它的forward方法,把网络中具有可学习参数的层放在构造函数 __init__ 中。如果某一层(如ReLU)不具有可学习的参数,则既可以放在构造函数中,也可以不放,但建议不放在其中,而在forward中使用 nn.functional 代替。 import torch . nn as nn import torch . nn . functional as F torch.optim 中实现了深度学习中绝大多数的优化方法,例如RMSProp、Adam、SGD等,更便于使用,因此大多数时候并不需要手动写上述代码。 import torch . optim as optim torchvision 实现了常用的图像数据加载功能