点击查看完整代码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