机器学习——人工神经网络模型LSTM

article/2025/9/22 13:15:36

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模型,并且进行了实战。希望对你有帮助 :)


http://chatgpt.dhexx.cn/article/y6JXZFon.shtml

相关文章

LSTM神经网络详解

LSTM 长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题,目前比较流行。 长短时记忆网络的思路: 原始 RNN 的隐藏层只有一个状态,即h&am…

LSTM神经网络介绍

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 引言一、介绍1.1什么是LSTM?1.2基础知识1.2.1门控机制1.2.2 相关激活函数1.2.3网络参数介绍 二、LSTM网络架构2.1架构图 三、LSTM的门3.1遗忘门3.2输入门3.3输出门…

大白话理解LSTM神经网络(附实例讲解)

前言 本文章为个人学习笔记整理,所学习的内容来自b站up主老弓的学习日记,附有实例讲解。 归类 长短期记忆神经网络(LSTM)是一种特殊的循环神经网络(RNN)。原始的RNN在训练中,随着训练时间的加长以及网络层数的增多&a…

Idea如何导入一个SpringBoot项目

最近公司要求开发工具要用Idea,作为一个eclipse的老员工,记录一下Idea中遇到的坑 刚开始用Idea从Git上导入一个项目时,遇到了很多坑,网上有很多方法,我不多做介绍。只说明一下我使用的方法。 1.本地新建一个文件夹&a…

idea导入项目框架的方法

学习时,使用IDEA的时候,经常需要导入项目框架,下面操作介绍如何导入项目框架。 打开需要导入的项目 打开方式: 打开 idea ,选择 Import Project 也可以进入idea后,选择 Flie --> New --> Project …

IDEA导入Eclipse项目

背景:用习惯了idea再去用eclipse实在用的不习惯,于是将老的eclipse项目导入到eclipse,网上有很多教程,看了很多博客都不行,一直报错,各种报错,现在终于好了,我们一起来看看怎么将ecl…

关于新版idea如何导入项目

现今有很多同学都发现idea怎么找不到import project这个按钮了,我也遇到了这个问题,经过研究发现,之前使用import project最关键还是在于project form Existing Sources。 而就在打开项目后,File-->New-->Project form Exi…

idea导入项目后没有被识别为maven项目的解决办法

开发中遇到了idea导入项目后没有被识别为maven项目,使用下面方法即可 1、首先点击工具栏最左边的 Help 再点击 Find Action ;或者使用快捷键 CtrlShiftA 2、接着在输入框中输入 maven projects ,会弹出一个 Add Maven Projects 选项&#xf…

IDEA导入web项目并启动

导入项目 依次点击idea左上角的File->Project Structure->project 修改SDK、Language level,选择自己电脑对应的jdk版本,为web的运行提供jdk的环境 第二步,依次点击Facts->Web 点击Artifacts->Web Application:Exploded->…

Java代码实例2,idea导入项目后,没有项目结构

目录 专栏导读一、idea导入项目后,没有项目结构二、解决方案1、点击file -> project structure -> Modules2、点击右上角加号 --> import Modules3、选择import modules from external model4、导入后,就可以显示项目的目录结构了。 专栏导读 &…

IntelliJ IDEA导入Maven项目

(1)项目导入, 点击intelliJ IDEA的Open按钮, 找到项目目录下pom的文件,然后点击ok (先admin, 在biz-admin, 再加dal) 由于之前导入过这个项目,所以现在要先删除再导入 导入后编译器的右侧就会出现Maven Projects的侧边…

新手小白如何用IDEA成功导入并运行项目(IDEA+gradle+mysql)

因为我也是最近刚开始使用 IntelliJ IDEA ,以下是我的一个成功在浏览器运行出项目界面的过程,主要分为5步走战略,仅供参考。 1、打开IDEA 选择 file–>Open–>找到自己所要导入项目–>选着项目文件里的build.gradle文件–>点击…

eclipse项目导入idea

目录 一、IDEA的导入 二、项目配置 三,在IntelliJ IDEA配置Tomcat 一、IDEA的导入 1、首先选择File->New->Project from Existing sources/Project form Version Control,如果项目在你的本地则选择 Project from Existing sources, 如果你想从SVN上直接导入…

idea导入项目全部爆红问题怎么解决

背景 今天导入Git上拉下来的项目,又双叒爆红了。就像代码来大姨妈一样,紧张地手足无措。让我们一起看下咋回事。 二. 走过的路 为数不多的曾经爆红的经验告诉我,这一定是maven大哥们出问题了! 于是我开始检查: IDEA…

IDEA导入一个本地项目并运行

IDEA导入一个本地项目并运行 操作如下: 至此,一直点击下一步即可导入项目成功 此时项目想要运行,还需要配置Artifacts,如下图: 由于时间原因,稍后会补充更多细节

eclipse导入idea项目

eclipse导入已存在的项目,之前是用的idea 1、使用idea打开项目 ctrlaltshifts 2、打开eclipse,选择import,再选择 Exsting Projects into Workspace 3、用eclipse打开后,再用idea右键新建一个类发现没有 java class 选项了&#…

IntelliJ IDEA导入本地SpringBoot项目最超详细教程

前言 废话不多说,可是换成idea开发又该怎样导入呢?整合最近我已需要学习别人的项目,希望把这个过程记录下来帮助大家学习.1.打开open,去寻找对应的位置文件 2.如何引入的问题 ![在这里插入图片描述](https://img-blog.csdnimg.cn/8874d34b7be648138027d8d02dc88c2b…

在IDEA中导入本地项目

最近的软件构造实验需要把项目交到GitHub上,想要验证一下交上去的东西能不能运行,打算从GitHub上把提交的项目克隆下来,那克隆下来的项目怎么导入到IDEA中运行呢 第一步:从GitHub上clone代码-Download ZIP 第二步:下载…

IDEA使用教程—5、如何导入一个已有的项目

scala与此类似,只是需要的是sbt而不是maven. 今天刚开始学习使用intellij IDEA来进行后台开发,感觉这个软件跟之前用过的eclipse和myeclipse都不是很想同,然后学长给了《精通Spring4.x企业应用开发实战》这本书上相关的代码,今…

idea导入springboot项目运行教程

前置要求 ①具备Java环境,并且可以通过Maven进行安装项目依赖; ②具备IntelliJ IDEA工具,推荐专业版,社区版也不影响; ③具备Mysql5.7或以上版本数据库; ④具备Navicat数据库可视化管理工具&#xff1b…