LSTM的学习

学习目标:

               1·理解什么是人工神经网络。2·深入理解LSTM(长短期记忆网络)3·Code

浅析人工神经网络:

在谈人工神经网络模型之前我们先来了解一下生理上的神经网络。
下面是一张对比图:
Neural Science

Computer Science

人工神经网络实际上是模仿人类的神经元网络的搭建,就像最初图灵模型也是基于人类运算行为而提出的一个模型。

在人体中,当感受器受到刺激的时候会产生神经冲动,产生信号。神经元之间通过突起相互连结,实现信息的传递。但是医学上发现,信息传入细胞核之后并不是直接传给下一个神经元,而是需要达到某一特定”值“,被激活之后才能传给其他神经元。所以我们在模仿的时候会引入激活函数(高度非线性的)。另外,对于相同的信息,经过不同的”路线“传递,会出现不同程度的信息损失。因此,我们还会引入权重这一概念。所以人工神经元的工作流程就如下所示:

外界的输入乘上相应的权重就是该细胞核所获取的信息,信息累加之后由激活函数判断是否输出。
激活函数是信息传递比较重要的一环,但是我们不知道这个高度非线性的函数到底是什么,我们只能去猜这个函数,我们流行的“猜法”有如下四种形式:

当我们用sigmoid去构建网络的时候就可以发现,其实LogisticRegression是最简单的人工神经网络。在使用过程中,我们搭建复杂的人工神经网络,是基于每一个简单的人工神经元,通过排列、组合、连接完成的,本源其实是一样的,本质的东西是不会改变的。
我们在后面的代码coding部分会详细讲解如何使用。
下面是简单的全连接神经网络模型,每一列我们称之为一个神经网络层。由此我们可以具象地看到信息传递的路线的差别和信息的丢失。

理解了什么是人工神经网络,我们接下来进行学习一个基础模型解决有关 时间序列问题——


先上概览图:

LSTM模型在时间轴上是连续的,每一个A都表示某个时间点,信息是有继承的。该模型的处理数据的方式也是模拟人在处理时间序列的方式。
我们可以看到这其中,总共有两条时间序列:
下面这一条时间序列代表的输入=观测数据的输入+前一时刻的输出。
上面这一时间序列是知识、信息的继承,我们来看一看他是怎么运行的:

Ct-1是该模型在t-1时刻的知识状态,C~t是在输入新的观测之后新获得的信息,分别乘上相应的权重参数之后相加即可得到t时刻的知识状态。这个权重参数就决定了你在这些时刻所保留的知识。打个比方,如果是一个经验主义者,那么他的Ft就会偏大,不太相信新的观测,如果是一个现实主义者那么他的It就会偏大。实际上我们只要把这个等式理解明白了,我们就差不多弄清楚LSTM的原理了。

我们接下来讲讲上述等式的各个变量:)

首先是Ft的计算,因为此值是一个百分比数值,所以我们偏向于使用sigmoid激活函数。

Ft的输入= (对应权重) * [(t-1时刻的输出) concat (t时刻的新输入)] 最后套上激活函数。我们还可以看到该等式后面还有一项bf,其实这一项对于帮助我们理解LSTM并没有太大的帮助,只是担心模型太过复杂或者数据过于简单导致的模型过拟合,所加上的随机扰动(白噪音)。
其次是CtIt
我们可以看到其实这些变量在计算上的方法都是类似的,这里值的一提的是我们为什么要选用tanh为激活函数。因为我们的模型在学习的时候,每一次新的输入不一定给机器带来正面的影响,也有可能是负面的影响。所以我们需要的激活函数的返回值有正负。
最后是计算在t时刻的输出ht

我们会发现一个很奇怪的现象,为什么在输出的时候还要乘上一个权重参数Ot
Ot代表你打算用多少Ct激活后的数值做输出的百分比。
举一个生活中的例子,比如你明天要去参加考试了,已经准备的十分充分了,但是你十分低调,有100分的实力但就是不想考100分。虽然不是每个人都这么想,但是我们得给他们这个权力,这个“权力”就是这里的Ot
得出Ctht之后便会传给下一时刻,那么LSTM这一模型就在时间轴上“跑”起来了。

如何评价一个分类模型的好坏?

我们通常会建立一个Confusion Matrix:

这里预测正确的概率是:(TP + TN) / (TP + FP + FN + TN)
延申说一下:
FP:Type I error(本来是错的,被预测成对的)
FN:Type II error (本来是对的,被预测成错的)。

Coding(实战——气候科学中的EHI)

首先,什么是EHI?
EHI(热浪系数)>0说明热浪对身体有影响,反之则无影响。公式如下图所示:

先读入数据:

import numpy as np
import matplotlib.pyplot as plt
from netCDF4 import Datasetfile1 = 'pr_Amon_CESM1-CAM5_rcp85_r1i1p1_200601-210012.nc'
file2 = 'tas_Amon_CESM1-CAM5_rcp85_r1i1p1_200601-210012.nc'ds1 = Dataset(file1,'r')
ds2 = Dataset(file2,'r')pr = ds1.variables['pr'][:]
tas = ds2.variables['tas'][:]
lon = ds1.variables['lon'][:]
lat = ds1.variables['lat'][:]

我们这边以New York为例:

lon_NY_index =  int((360 - 74)/(360/288))
lat_NY_index = int(40.7 / (180/192)) + 96tas_NY = tas[:,lat_NY_index,lon_NY_index]
pr_NY = pr[:,lat_NY_index,lon_NY_index]

下面准备数据集:
Tips:LSTM是依赖于时间序列的,所以在进行数据集拆分的时候要注意不能打乱时间!

# prepare data
X = np.hstack((pr_NY[90:-2].reshape(-1,1), tas_NY[90:-2].reshape(-1,1)))
y = np.full([len(tas_NY)-92],np.nan)
for i in range(len(y)):y[i] = ( np.mean(tas_NY[90+i:90+i+3]) - np.mean(tas_NY[i:i+90])) > 0X_train = []
y_train = []
for i in range(10,int(len(X)*0.8)):X_train.append(X[i-10:i,:])y_train.append(y[i])
X_train, y_train = np.array(X_train), np.array(y_train)X_test = []
y_test = []
for i in range(int(len(X)*0.8), len(X)):X_test.append(X[i-10:i,:])y_test.append(y[i])
X_test, y_test = np.array(X_test), np.array(y_test)

LSTM模型的建立(此处为方便起见我们只建立一层神经网络):

# build model
from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Densemymodel = Sequential()
mymodel.add(LSTM(10, input_shape=(X_train.shape[1], X_train.shape[2])))
mymodel.add(Dense(units=1, activation = 'sigmoid'))

神经网络建立起来之后我们进行训练及预测:

# compile
mymodel.compile(optimizer='adam', loss='mse')
mymodel.fit(X_train, y_train, epochs = 50, batch_size=50)# prediction
y_pred = mymodel.predict(X_test)
y_pred = y_pred > 0.5

最后评价此模型:

from sklearn.metrics import confusion_matrix
c = confusion_matrix(y_pred, y_test)
accuracy = (c[0,0]+c[1,1])/(np.sum(c))*100

OK到这里我们基本了解LSTM模型,并且进行了实战。希望对你有帮助 :)

机器学习——人工神经网络模型LSTM相关推荐

  1. 人工神经网络模型发展及应用综述

    摘要:机器学习这一词不断的出现在网络上,也是近几年受欢迎的热词,而机器学习的基础算法就是人工神经网络,人工神经网络的研究是当下各种网络的基础,也越来越受人们的关注,现在人工神经网络的发展在当下不管是理 ...

  2. 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec...

    人工神经网络,借鉴生物神经网络工作原理数学模型. 由n个输入特征得出与输入特征几乎相同的n个结果,训练隐藏层得到意想不到信息.信息检索领域,模型训练合理排序模型,输入特征,文档质量.文档点击历史.文档 ...

  3. 机器学习之神经网络模型-下(Neural Networks: Representation)

    机器学习之神经网络模型-下(Neural Networks: Representation) 3. Model Representation I 1 神经网络是在模仿大脑中的神经元或者神经网络时发明的 ...

  4. MLP入门:多层人工神经网络模型及算法公式推导(正向传播与逆向传播过程详解)

    1. 多层人工神经网络模型 多层感知机MLP(Multi-Layer Perceptron)也叫多层人工神经网络.一般的,常见的神经网络是如下图所示的层级结构.由输入层.隐藏层(可有多层)和输出层组成 ...

  5. 人工神经网络模型定义,人工神经网络基本框架

    人工神经网络评价法 人工神经元是人工神经网络的基本处理单元,而人工智能的一个重要组成部分又是人工神经网络.人工神经网络是模拟生物神经元系统的数学模型,接受信息主要是通过神经元来进行的. 首先,人工神经 ...

  6. 人工神经网络的典型模型,人工神经网络模型定义

    神经网络BP模型 一.BP模型概述误差逆传播(ErrorBack-Propagation)神经网络模型简称为BP(Back-Propagation)网络模型. PallWerbas博士于1974年在他 ...

  7. 人工神经网络模型定义,人工智能神经网络模型

    1.什么是神经网络,举例说明神经网络的应用 我想这可能是你想要的神经网络吧! 什么是神经网络: 人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(N ...

  8. 人工神经网络建模步骤,人工神经网络模型定义

    利用人工神经网络建立模型的步骤 人工神经网络有很多种,我只会最常用的BP神经网络.不同的网络有不同的结构和不同的学习算法.简单点说,人工神经网络就是一个函数.只是这个函数有别于一般的函数.它比普通的函 ...

  9. 常见的人工神经网络模型,人工智能神经网络模型

    人工神经网络,人工神经网络是什么意思 一. 人工神经网络的概念人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是基于生物学中神经网络的基本原理,在理解和 ...

最新文章

  1. 安装eclipse时一直跳转JRE Missing页面
  2. 洛谷P1919 【模板】A*B Problem升级版(FFT)
  3. opencv-python 9.3 图像 ROI
  4. python每一句后面可以加也可以不加分号
  5. ] ssh登录慢的原因
  6. AutoHotkey调用VBA实现批量精确筛选数据透视表某字段内容。
  7. nagios监控mysql服务_nagios监控mysql及邮件报警
  8. Android控件——ListView之Adapter提供数据(其二)
  9. memset()函数及其作用
  10. 106页的《Python进阶》中文版(附下载)
  11. SpringBoot使用菜鸟物流云打印电子面单
  12. 限行查询API_路帮网
  13. python 集合排序
  14. android ps icon图标制作,PS设计App图标教程
  15. Odoo12功能增强模块
  16. python代码复制运行不了_pycharm 复制代码出现空格的解决方式
  17. linux查看usr利用率,在Linux中通过Top运行进程查找最高内存和CPU使用率
  18. mac checkra1n越狱14.0-14.8
  19. Game Maker 基金会呈献:归属之谷
  20. java项目-第136期ssm超市收银管理系统-java毕业设计

热门文章

  1. 如何用 CSS 修出好看的照片
  2. 内存拷贝CopyMemory与MoveMemory
  3. python3函数重载_关于Python3.1的重载函数问题
  4. HINIX(广州汇佳电子)样片申请与经验
  5. linux 文件管理打不开,Linux基础:文件管理
  6. 【程序33】学习gotoxy()与clrscr()函数(TC实现版本)
  7. MPSA44L SOT-89 T/R 友顺UTC
  8. 1027 打印沙漏 (20 分)
  9. python dict sort_python sort dict 总结
  10. 你的手机浏览器不支持webgle_享受视觉盛宴 百度手机浏览器2.2版支持WebGL技术