sigmoid

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 ,

深度学习中常见的激活函数

有些话、适合烂在心里 提交于 2019-12-01 15:55:34
  上一篇文章介绍了激活函数的作用,就想一并整理一下深度学习领域中常见的激活函数。在深度学习中,常见的激活函数有三种:sigmoid函数,tanh函数,ReLU函数,下面分别进行介绍。    1.sigmoid函数(S型增长函数)    sigmoid函数能够将取值为$(-\infty,+\infty)$的数映射到$(0,1)$。公式和图形如下:$$S(x)=\frac{1}{1+e^{-z}}$$ 来源: https://www.cnblogs.com/chester-cs/p/11691509.html

Unwanted [Nan] output in Python neural network

℡╲_俬逩灬. 提交于 2019-12-01 12:49:45
newbie here. Just switched over from JS to Python to build Neural nets but getting [Nan] outputs from it. The weird thing is that my sigmoid func. doesn't seem to encounter any overflow but the derivative causes chaos. import numpy as np def sigmoid(x): return x*(1-x) return 1/(1 + np.exp(-x)) #The function- 2 def Sigmoid_Derivative(x): return x * (1-x) Training_inputs = np.array([[0,0,1], [1,1,1], [1,0,1], [0,1,1]]) Training_outputs = np.array([[0, 1, 1, 0]]).T np.random.seed(1) synaptic_weights = np.random.random((3, 1)) - 1 print ("Random starting synaptic weight:") print (synaptic_weights)

Unwanted [Nan] output in Python neural network

旧街凉风 提交于 2019-12-01 10:31:22
问题 newbie here. Just switched over from JS to Python to build Neural nets but getting [Nan] outputs from it. The weird thing is that my sigmoid func. doesn't seem to encounter any overflow but the derivative causes chaos. import numpy as np def sigmoid(x): return x*(1-x) return 1/(1 + np.exp(-x)) #The function- 2 def Sigmoid_Derivative(x): return x * (1-x) Training_inputs = np.array([[0,0,1], [1,1,1], [1,0,1], [0,1,1]]) Training_outputs = np.array([[0, 1, 1, 0]]).T np.random.seed(1) synaptic

注意机制CBAM

天涯浪子 提交于 2019-12-01 09:49:38
这是一种用于前馈卷积神经网络的简单而有效的注意模块。 给定一个中间特征图,我们的模块会沿着两个独立的维度(通道和空间)依次推断注意力图,然后将注意力图乘以输入特征图以进行自适应特征修饰。 由于CBAM是轻量级的通用模块,因此可以以可忽略的开销将其无缝集成到任何CNN架构中,并且可以与基础CNN一起进行端到端训练。 为了实现这一目标,我们依次应用频道和空间关注模块(如图1所示),以便每个分支机构都可以分别学习在频道和空间轴上参与的“内容”和“位置”。结果,我们的模块通过学习要强调或抑制的信息来有效地帮助网络中的信息流。将结果先通过通道加权模块,再通过空间位置加权模块 这里对网络做一个实际性的分析, channel attention Module 主要是关注哪些通道对网络的最后输出结果起到作用,即文章中提到的‘什么’,即哪些特征对最终的预测起到了决定性的作用 channel 特征分析,输入通过一个最大值池化和均值池化 最大值池化分析:首先通过对宽度和高度进行最大值池化,然后对特征通道进行全连接,为了减少参数,这里的输出通道为 channel / 8, 下一步再进行全连接,使得输出通道为 channel。 均值池化分析:首先通过对宽度和高度进行均值池化,然后对特征通道进行全连接,为了减少参数,这里的输出通道为channel / 8, 下一步再使用全连接,使得输出通道为channel。

深度学习入门初步总结

▼魔方 西西 提交于 2019-11-30 19:55:51
深度学习入门初步总结 前言 在学习深度学习之前,从某乎上看了相关的学习路线,又通过师兄们的请教,最后选择了在linux环境下,用python进行代码的编写。由于自己在这之前,对linux没有接触过,所以在安装Ubuntu以及在环境安装下还是走了不少弯路,后续会把相关的安装教程也写在博客中。在学习之前,可以说自己真的还是个小白,很多东西都不会,望以后可以和大家多多交流,一些想法可能不正确,望各位也能指出来。 一、技术储备 python基本语法 由于自己之前学过python,在这里就不多做总结了 Numpy库 首先,numpy是python的外部库,支持大量的维度数组与矩阵运算以及大量的数学函数库。别人封装好的东西为什么不用?不过在有些库用之前,最好去扒一扒它的底层,不要仅仅停留在会用上,不然太容易被淘汰了。 然后,numpy库可以直接通过pip3安装,下面这条命令即可 sudo apt-get install python-numpy 其次,学会numpy的几条基本语法,其它的在有需要的时候再去问度娘,下面归纳几个经常会用到的语法。 import numpy as np np.empty([3,2], dtype = int) #创建一个空的3行2列的矩阵,dtype为指定类型,默认为float类型 np.zeros(5) #创建一个长度为5的数组 np.zeros_like(x)

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='--',

编程作业ex2:Logistic 回归

不羁的心 提交于 2019-11-30 15:52:29
1、logistic回归 1.1 可视化数据 打开ex2data1.txt观察数据 第一列和第二列为两次考试的成绩,第三列代表该生是否能被录取,1代表录取,0代表不录取 读取数据: data = load('ex2data1.txt'); X = data(:, [1, 2]); y = data(:, 3); % 将数据集前两列赋给X,将数据集最后一列赋给y 将样本数据绘制在图上,坐标轴是两次考试的成绩,两种标记代表了他们能否被录取。 function plotData(X,y) figure; hold on; % 用find函数寻找1和0的项,返回的位置分别存在pos和neg中 pos = find(y == 1); neg = find(y == 0); % 画图 plot(X(pos, 1), X(pos, 2), 'k+','LineWidth', 2, 'MarkerSize', 7);% X(pos,1),X(pos,2)为能够被录取样本的两次考试成绩,k+表示线型为加号型,黑色,线宽为2,标记大小为7 plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y','MarkerSize', 7);% X(neg,1),X(neg,2)为不能被录取样本的两次考试成绩值,ko表示线型为圆圈,黑色,填充色为黄色