3-3长短时记忆神经网络(LSTM)--Tensorflow实现

点击查看完整代码http://www.daimapi.com/neuralnetwork3_3/

该代码利用Python3实现,利用到了深度学习工具包Tensorflow。

TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from typing import Optional, Tuple
from tensorflow.contrib import rnn

def RNN(x, weights, biases, n_input, n_steps, n_hidden):
    # 准备数据形状以匹配RNN函数的要求
    # 当前数据输入形状: (batch_size, n_steps, n_input)
    # 要求形状: 'n_steps' 张量形状列表 (batch_size, n_input)
    # 置换 batch_size and n_steps
    x = tf.transpose(x, [1, 0, 2])
    # 重定义形状 (n_steps*batch_size, n_input)
    x = tf.reshape(x, [-1, n_input])
    # 分割得到列表 'n_steps' 形状张量 (batch_size, n_input)
    x = tf.split(x, n_steps, axis=0)
    # 用张量流定义一个LSTM单元
    lstm_cell = rnn.BasicLSTMCell(n_hidden, forget_bias=1.0)
    # 获取LSTM信元输出
    outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32)
    # 线性激活函数,使用RNN内循环最后输出
    return tf.nn.bias_add(tf.matmul(outputs[-1], weights['out']), biases['out'])

def generate_sample(f: Optional[float] = 1.0, t0: Optional[float] = None, batch_size: int = 1,
                    predict: int = 50, samples: int = 100) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]:
    """
    生成数据样本。

    :参数 f: 用于所有时间序列或没有随机化的频率。
    :参数 t0: 用于所有时间序列或没有随机化的时间偏移。
    :参数 batch_size: 生成的时间序列的数量。
    :参数 predict: 要生成的未来样本的数量。
    :参数 samples: 要生成的过去(和当前)样本的数量。
    :返回: 元组包含过去的时间和值以及未来的时间和值。在所有输出中,每行表示批的一个时间序列。
    """
    Fs = 100

猜你喜欢

转载自blog.csdn.net/aeoob/article/details/81050858