relu

deep_learning_Activate_method

本秂侑毒 提交于 2019-11-30 16:13:51
常见的激活函数有sigmoid、tanh和relu三种非线性函数,其数学表达式分别为: sigmoid: y = 1/(1 + e -x ) tanh: y = (e x - e -x )/(e x + e -x ) relu: y = max(0, x)   其代码实现如下: import numpy as np import matplotlib.pyplot as plt def sigmoid(x): return 1 / (1 + np.exp(-x)) def tanh(x): return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x)) def relu(x): return np.maximum(0, x) x = np.arange(-5, 5, 0.1) p1 = plt.subplot(311) y = tanh(x) p1.plot(x, y) p1.set_title('tanh') p1.axhline(ls='--', color='r') p1.axvline(ls='--', color='r') p2 = plt.subplot(312) y = sigmoid(x) p2.plot(x, y) p2.set_title('sigmoid') p2.axhline(0.5, ls='--',

机器学习之卷积神经网络CNN

只谈情不闲聊 提交于 2019-11-30 13:22:51
卷积神经网络CNN(入门认知) CNN的目的:特征提取 层次:卷积层 .池化层 .输出层 卷积层 :利用局部特征(卷积核),去计算出目标的 整体特征情况。 上图中的 各种X ,我们可以提取其中的几个特征作为卷积核。下图中选择红框框起来的作为特征。 所以我们可以得到三个 卷积核(也称为过滤器) : 卷积运算: 矩阵对应位子的乘法运算,然后选择平均值填入 feature map 图中。(如下图所示) 将目标与卷积核分别进行卷积运算,就可以 一个feature map,比如这里三个卷积核,最后会有三层的 feature map被得到。 所以经过卷积运算,可以将目标数据缩小,上图中9x9 的目标,卷积后 变成 7x7了。完整动态图见下方 激励层Relu: 获取特征图中 关联性大的数据,将关联性小的 都直接设置为0 数学公式是:f(X)=max(0,X) 池化层pooling (采样):压缩数据 虽然进行卷积操作已经使得数据变小了一点,但是还是不够小。需要使用到池化层,池化的方法有 最大池化(取最大值)和平均池化(取最小值)。下图所示的就是最大池化,在2x2的池化窗口中,选择一个最大的数值 填入到新的 特征图(feature mao)中。 为什么可以这样压缩?因为CNN想要的是知道有没有匹配的特征,不需要知道这个特征在那个位置匹配,所以这样压缩还是可以知道有匹配的数据以及其程度。 1

中山大学数据科学与计算机学院面试

孤者浪人 提交于 2019-11-30 11:57:27
介绍下本人。中山大学,医学生+计科学生的集合体,机器学习爱好者。此处分享两次面试。 【一、总记】 由于一个契机,笔者联系到了本校数据院的老师,老师看了我的简历同意安排一个简单的面试来考察一下我的能力。接着笔者会分享两次不同团队的面试的回答记录,还请各位大佬批评指正。 【二、准备工作】 1、复习一下传统CNN、DenseNet、FastRCNN、Lightgbm、Xgboost、GBDT等常用算法的原理。 2、复习吴恩达深度学习笔记。 【三、第一次面试——20190909 15:00-16:00,面对面】 一、技术类(只记录技术类) 1、医学数据的特点 (1)数据不平衡。 (2)数据少。 2、医学数据不平衡有什么办法 (1)降采样。 (2)过采样。 3、医学数据量少有什么办法 (1)数据增强,比如图像拉伸旋转扭曲。 4、用什么框架 (1)一般用tensorflow (2)百度开发者大赛用过paddlepaddle。 5、矩阵的秩的概念 (没答上来,忘记了) (1)百度答案 ①在线性代数中,一个矩阵A的列秩是A的线性独立的纵列的极大数目。 ②类似地,行秩是A的线性无关的横行的极大数目。即如果把矩阵看成一个个行向量或者列向量,秩就是这些行向量或者列向量的秩,也就是极大无关组中所含向量的个数。 6、贝叶斯公式 (答错一半) 7、梯度和导数的区别 (1)梯度其实可以理解为导数。 (2

神经网络中的梯度消失

送分小仙女□ 提交于 2019-11-30 00:47:58
什么是梯度消失? 神经元的权重w和偏置b是和激活函数的梯度成正比的,激活函数导数越大,则w,b调整越快,如果激活函数梯度很小,在反向传播时,多个小于0的导数相乘,随着神经网络层数的加深,梯度方向传播到浅层网络时,基本无法引起全职的波动,也就是没有将loss的信息传递到浅层网络,这样网络就无法训练学习了。这就是所谓的梯度消失。 以sigmoid激活函数为例: sigmoid(x)=1/1+e^−x 该函数可以将实数压缩到开区间(0,1),其导数为: σ′(x)=e^−x/(1+e^−x)^2=σ(x)/(1−σ(x)) 函数图像如下: <ignore_js_op> 数两侧十分平滑,两端无限接近0和1,只有中间一段导数较大。当x=0时,其导数取最大值0.25。选择sigmoid函数作为激活函数的优势:1)可以引入非线性;2)容易求导;3)可以将实数压缩至(0,1) 神经网络主要的训练方法是BP算法,BP算法的基础是导数的链式法则,也就是多个导数的乘积。而sigmoid的导数最大为0.25,且大部分数值都被推向两侧饱和区域,这就导致大部分数值经过sigmoid激活函数之后,其导数都非常小,多个小于等于0.25的数值相乘,其运算结果很小。 梯度消失的解决方式主要有: 1)其它激活函数 激活函数对神经网络有显著的影响,现行常见的激活函数有ReLU、Leaky ReLU。 ReLU f(x)

Alexnet网络与Vgg网络

社会主义新天地 提交于 2019-11-30 00:32:48
迁移学习 使用迁移学习来实现猫狗分类。 迁移学习的个人理解:就是把一个训练好的神经网络从中分开,在拼接到其他的神经网络上,在迁移的过程中,卷积模块的结构不会发生改变,并且权重也不会发生改变。迁移学习分为两种:1.预训练模式,迁移过来的权重作为新网络的初始权重,然后不断训练,改变参数的值。2.固定模式,迁移过来的网络结构和权重都不会改变,训练过程只针对全连接层,在反向传播过程中,在迁移模块停止,不改变迁移模块中的权重,只训练全连接层的参数。 Alexnet网络的结构 Alexnet网络是由五个卷积层和三个全连接层构成,其中最后的输出被送到1000维的softmax函数 在卷积层的第一、第二和第五层使用了最大池化函数,并且在卷积层的第一和第二层使用了标准化 LRN函数。在全连接层的前两层使用了Dropout函数,来解决神经网络的过拟合问题。Relu激活函 数应用在每个卷积层和全连接层。 第一个卷积层的输入为224×224×3的图像,对其使用96个大小为11×11×3、步长为4的卷积核来处 输入图像。第二个卷积层将第一个卷积层的输出(响应归一化以及池化)作为输入,并使用256个 卷积核处理图像,每个内核大小为5×5×48。第三个、第四个和第五个卷积层彼此连接而中间没有任 何池化或归一化层。第三个卷积层有384个卷积核,每个的大小为3×3×256,其输入为第二个卷积层 的输出

Keras Sequential顺序模型

為{幸葍}努か 提交于 2019-11-29 17:58:34
keras是基于tensorflow封装的的高级API,Keras的优点是可以快速的开发实验,它能够以 TensorFlow , CNTK , 或者 Theano 作为后端运行。 模型构建 最简单的模型是 Sequential 顺序模型 ,它由多个网络层线性堆叠。对于更复杂的结构,你应该使用 Keras 函数式 API ,它允许构建任意的神经网络图。 用Keras定义网络模型有两种方式, Sequential 顺序模型 Keras 函数式 API模型 1、Sequential 顺序模型 from keras.models import Sequential model = Sequential() 我们可以通过将网络层实例的 列表 传递给 Sequential 的构造器,来创建一个 Sequential模型,: from keras.models import Sequential from keras.layers import Dense, Activation model = Sequential([ Dense(32, input_shape=(784,)), Activation('relu'), Dense(10), Activation('softmax'), ]) 也可以通过 .add()的方法将各层添加到网络中 from keras.layers import

tensorflow.keras

萝らか妹 提交于 2019-11-29 17:57:57
在keras中,可以通过组合层来构建模型。模型是由层构成的图。最常见的模型类型是层的堆叠: tf.keras.Sequential . model = tf.keras.Sequential() # Adds a densely-connected layer with 64 units to the model: model.add(layers.Dense(64, activation='relu')) # Add another: model.add(layers.Dense(64, activation='relu')) # Add a softmax layer with 10 output units: model.add(layers.Dense(10, activation='softmax')) tf.keras.layers的参数,activation:激活函数,由内置函数的名称指定,或指定为可用的调用对象。kernel_initializer和bias_initializer:层权重的初始化方案。名称或可调用对象。kernel_regularizer和bias_regularizer:层权重的正则化方案。 # Create a sigmoid layer: layers.Dense(64, activation='sigmoid') # Or: layers

CNN模型的可视化方式

大兔子大兔子 提交于 2019-11-29 14:07:56
文章目录 打印模型结构 生成类原型 (Classes Prototype Generation) 创建模型 加载已经训练好的模型 生成图片 基于梯度的方法(Gradient based Methods) 热力图(Saliency Map) 定义网络 计算热力图 特征激活图(Feature activation map) Class Activation Map(CAM) Gradient-weighted Class Activation Mapping (Grad-CAM) 打印模型结构 from torchsummaryX import summary from torchvision . models import alexnet , resnet34 , resnet50 , densenet121 , vgg16 , vgg19 , resnet18 import torch summary ( resnet18 ( pretrained = False ) , torch . zeros ( ( 1 , 3 , 224 , 224 ) ) ) ==================================================================================================== Kernel Shape

模型权重初始化的可行性分析

丶灬走出姿态 提交于 2019-11-29 09:51:45
原文链接: https://www.leiphone.com/news/201703/3qMp45aQtbxTdzmK.html 原文是谷歌大神工程师写的一篇文章,看到之后觉得很不错,能够直观地让你深入理解权重初始化方式以及激活函数对模型训练的影响。 本文是对原文的解读,并附上了自己的理解以及代码实现。 首先,一个好的权重初始化方法能够帮助神经网络更快的找到最优解决方案。 初始化权重的必要条件1:各网络层激活值不会落在激活函数的饱和区域; 初始化权重的必要条件2:各网络层激活值不会都非常接近0,也不会都远离0,最好是均值为0(以0为中心分布) 1、初始化为0的可行性: 不可行,如果将所有的权重都初始化为0,那么所有神经元的输出数值都是一样的,那么反向传播时,同一层的所有的梯度都是一样的,权重更新也是一样的,这样的训练是没有意义的。 2、可行的几种初始化方式: pre-training: 即是利用训练好的模型的参数进行初始化,然后再做fine-tuning。 Random initialization: 10层网络,采用随机初始化权重,每层输出数据分布 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt data = tf.constant(np.random.randn(2000,

Tensorflow2教程16:CNN变体网络

家住魔仙堡 提交于 2019-11-29 06:22:13
  h2>1.载入数据   (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()   x_train = x_train.reshape((-1,28,28,1))   x_test = x_test.reshape((-1,28,28,1))   print(x_train.shape, ' ', y_train.shape)   print(x_test.shape, ' ', y_test.shape)   (60000, 28, 28, 1) (60000,)   (10000, 28, 28, 1) (10000,)   2.简单的深度网络   如AlexNet,VggNet   x_shape = x_train.shape   deep_model = keras.Sequential(   [   layers.Conv2D(input_shape=((x_shape[1], x_shape[2], x_shape[3])),   filters=32, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu'),   layers.Conv2D(filters=32, kernel_size=(3