RNN中LSTM网络用法

本文介绍了LSTM网络在解决RNN长序列训练问题中的作用,详细剖析了其内部结构,包括三个主要阶段。接着,文章展示了LSTM在Python中的实战应用,包括数据预处理的步骤和注意事项,如数据归一化、one-hot编码。最后,讨论了LSTM模型的搭建、编译、评估、保存与预测,并提到了常用激活函数和损失函数的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. RNN简介

 

 

2. LSTM简介

长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。

LSTM结构(图右)和普通RNN的主要输入输出区别如下所示。

下面具体对LSTM的内部结构来进行剖析。

深度学习:人人都能看懂的LSTM

下面开始进一步介绍这四个状态在LSTM内部的使用。(敲黑板)

深度学习:人人都能看懂的LSTM

LSTM内部主要有三个阶段:

深度学习:人人都能看懂的LSTM

 

更常见的LSTM原理图如下图:

3. LSTM的python实战

3.1 & 3.1.1 数据预处理

数据预处理是非常关键的一步,需要把数据转换成LSTM模型规定的数据格式,即监督型数据,大致格式:过去n步+预测1步。

预处理代码

def series_to_supervised(data, n_steps=3, split_radio=0.7):
    # featrues = 1 if type(data) is list else data.shape[1]
    data = pd.DataFrame(data, dtype=v_TYPE)
    data = data.values
    data = data.astype(v_TYPE)

    col = []
    n_len = len(data)
    for i in range(n_len-n_steps):
        temp = []
        for j in range(n_steps):
            temp.append(list(data[i+j,:]))
        col.append(np.array([temp, list(data[i+n_steps,:])]))

    m_len = len(col)
    split = int(m_len*split_radio)
    col = pd.DataFrame(col, dtype=v_TYPE).values
    train, test = col[:split,:], col[split:,:]
    X_train, y_train = train[:, :-1], train[:, -1]

    # TO DO: convert y_train and y_test to np.arry(),.if not,
    #  it'll report ERROR: ValueError: setting an array element with a sequence
    y = []
    for row in y_train:
        y.append(row)
    y_train = np.array(y)
    X_test, y_test = test[:, :-1], test[:, -1]
    y = []
    for row in y_test:
        y.append(row)
    y_test = np.array(y)

    X_train = merge_arrylist(X_train)
    X_test = merge_arrylist(X_test)
    X_train = X_train.reshape(y_train.shape[0], n_steps, X_train.shape[1])
    X_test = X_test.reshape(y_test.shape[0], n_steps, X_test.shape[1])

    X_train = X_train.astype(v_TYPE)
    X_test = X_test.astype(v_TYPE)

    return X_train, y_train, X_test, y_test

举个例子,单变量序列: [1,2,3,4,5,6,7], 这里时间步长为1,设定预测的时间步长timesteps=3,则意味着利用三个连续数据预测下一个(第

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Poo_Chai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值