Tensorflow 中的长短期记忆 (LSTM) RNN

本文讨论了 “循环神经网络 (RNN) ” 和 “长短期记忆 (LSTM) ” 的概念,以及它们使用 Python 编程语言和必要的库的实现。

递归神经网络

  • 它是最古老的网络之一,创建于 1980 年代,但当时没有计算机的计算能力,因此近年来它没有成为众人瞩目的焦点,由于高生成数据和计算机的高计算能力,它变得非常流行。
  • RNN 的主要用途是它非常准确地用于序列和时间序列数据。
  • 它是最强大的算法之一,它具有内部存储器来存储以前的数据。这是 RNN 结构中的主要关键特征之一。
  • 内部存储器有助于记住重要的事情,这也允许人们预测接下来会发生什么 RNN 是一个 “反馈” 神经网络,它在隐藏层有自环。
  • RNN 具有短期记忆,它只存储一小段信息。

架构或 RNN

Tensorflow 中的长短期记忆 (LSTM) RNN的图2 编辑

架构或 RNN

上述架构描述了我们可以观察到 input(x) 传递到隐藏层 (c) 的 RNN 功能,其中隐藏层具有自环来存储内存,并且信息传递给输出层。在这里,隐藏层的功能将是下一组输入,以便隐藏层充当短期记忆并将信息带到下一组层。

RNN 的缺点

  • 计算速度会很慢
  • RNN 网络只承载短期信息,长期信息不能被纳入。
  • 梯度问题趋于消失(Value 太小,模型停止学习)

长短期记忆

为了克服 RNN 中遇到的缺点,科学家发明了一项名为“长短期记忆”的发明。LSTM 是 RNN 的子项,它可以存储长期信息并克服梯度消失的缺点。

1. 忘记门

它负责保留信息或忘记信息,因此对其应用 sigmoid 激活函数,如果它是 0(忘记信息)或 1(保留信息),则输出范围为 0-1。

Tensorflow 中的长短期记忆 (LSTM) RNN的图4 编辑

 

2. 输入门

它负责表达输入所携带的新信息的重要性,在这里我们将应用两个激活函数 sigmoid 和 tanh。sigmoid 功能是保留或丢弃信息,而 tanh 功能是从细胞状态中减去信息或向细胞状态添加新信息。

编辑

 

3. 输出门

根据我们获得的信息,我们将句子作为填空函数提供给输出门,根据它感知到的信息将输出结果

Tensorflow 中的长短期记忆 (LSTM) RNN的图8 编辑

 

导入库和数据集

Python 库使我们能够非常轻松地处理数据并使用一行代码执行典型和复杂的任务。

  • 熊猫 – 该库有助于以 2D 数组格式加载数据帧,并具有多种功能可以一次性执行分析任务。
  • Numpy – Numpy 数组速度非常快,可以在很短的时间内执行大型计算。
  • Matplotlib – 此库用于绘制可视化效果。
  • NLTK – 自然语言工具包是一个非常方便的工具,用于将原始文本转换为已处理的文本,以便将其输入到机器学习模型中。
  • TensorFlow – 这是一个用于机器学习和人工智能的开源库,并提供一系列功能以通过单行代码实现复杂的功能。
  • Python3 语言

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
 
from tensorflow import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM

第 2 步:现在使用 pandas 数据帧加载数据。我们将在本文中使用牛奶生产数据,您可以从 此处.

df = pd.read_csv('monthly_milk_production.csv',
                 index_col='Date',
                 parse_dates=True)
df.index.freq = 'MS'

现在,让我们通过打印数据集的前五行来检查数据集是否已正确加载。

df.head()

输出:

数据集的前五行

Tensorflow 中的长短期记忆 (LSTM) RNN的图10 编辑

数据集的前五行

第 4 步:现在继续对数据集执行 EDA 分析。

  • Python3 语言

# Plotting graph b/w production and date
df.plot(figsize=(12, 6))

输出:

牛奶产量随时间变化的趋势

Tensorflow 中的长短期记忆 (LSTM) RNN的图12 编辑

牛奶产量随时间变化的趋势

步骤 5:时间序列数据的季节性分析

  • Python3 语言

from statsmodels.tsa.seasonal import seasonal_decompose
results = seasonal_decompose(df['Production'])
results.plot()

输出:

所提供数据中的“季节性”、“趋势”、“残差”图形

Tensorflow 中的长短期记忆 (LSTM) RNN的图14 编辑

所提供数据中的“季节性”、“趋势”和“残差”图表

第 6 步:- 将数据分为训练和测试。

train = df.iloc[:156]
test = df.iloc[156:]

第 7 步:扩展我们的数据以快速准确地执行计算。

  • Python3 语言

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(train)
scaled_train = scaler.transform(train)
scaled_test = scaler.transform(test)

第 8 步:处理时间序列生成。

  • Python3 语言

from keras.preprocessing.sequence import TimeseriesGenerator
 
n_input = 3
n_features = 1
generator = TimeseriesGenerator(scaled_train,
                                scaled_train,
                                length=n_input,
                                batch_size=1)
X, y = generator[0]
print(f'Given the Array: \n{X.flatten()}')
print(f'Predict this y: \n {y}')
# We do the same thing, but now instead for 12 months
n_input = 12
generator = TimeseriesGenerator(scaled_train,
                                scaled_train,
                                length=n_input,
                                batch_size=1)

步骤9: 现在,让我们使用 TensorFlow API 定义模型的架构。

  • Python3 语言

# define model
model = Sequential()
model.add(LSTM(100, activation='relu',
               input_shape=(n_input, n_features)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
model.summary()
model.fit(generator, epochs=5)

输出:

LSTM 模型的架构

Tensorflow 中的长短期记忆 (LSTM) RNN的图16 编辑

LSTM 模型的架构

第 10 步:输出准确率

LSTM 模型的训练进度

Tensorflow 中的长短期记忆 (LSTM) RNN的图18 编辑

LSTM 模型的训练进度

登录后免费查看全文
立即登录
App下载
技术邻APP
工程师必备
  • 项目客服
  • 培训客服
  • 平台客服

TOP

1
1