tensorflow LSTM实现sin(x)预测

本文介绍了一种基于LSTM的时序数据预测模型。通过使用numpy生成平滑的正弦序列作为训练数据,并采用滑动窗口的方式构建样本集。模型包含两层LSTM结构,每层单元数为10,最后通过全连接层输出预测结果。实验结果显示,该模型能有效预测测试集中的数据。

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

1.实验设计

  • 数据格式
    X,y=(x1,..,x10),x11
  • 数据生成
    使用np.linespace(0,100,10000)生成一个数组, 再用np.sin()得到时序数据. 因为 Δx=0.01 , 所以得到的sin(x) 序列足够光滑.
    接下来生成样本集. 用 i 作游标, 像滑动窗口一样, 取连续的10个数据作 X, 第11个数据作 y.

2.网络设计

输入层是10维的, 所以设计NUM_UNITS=10, NUM_LAYERS=2.

  • 隐层设计
lstm_cell = tf.nn.rnn_cell.BasicLSTMCell(NUM_UNITS, state_is_tuple=True)
cell = tf.nn.rnn_cell.MultiRNNCell([lstm_cell] * NUM_LAYERS)
  • 输入层
output, _ = tf.nn.dynamic_rnn(cell, features, dtype=tf.float32)
output = tf.reshape(output, [-1, NUM_UNITS])
  • 输出层
    # 创建一个全连接层,因为是回归问题, 输出的维度为1,None指的是不使用激活函数
    predictions = tf.contrib.layers.fully_connected(output, 1, None)

    # 将predictions和labels调整统一的shape
    labels = tf.reshape(labels, [-1])
    predictions=tf.reshape(predictions, [-1])
  • 损失函数与优化方法
    loss = tf.losses.mean_squared_error(predictions, labels)

    train_op = tf.contrib.layers.optimize_loss(
        loss, tf.contrib.framework.get_global_step(),
        optimizer="Adagrad", learning_rate=0.1)

3.代码

Github: predict_six_x.py

下面是作出的图像:

这里写图片描述
图1 测试集中真实值与预测值的曲线, 几乎完全重叠.

这里写图片描述
图 2 基于图1顶部的放大, 看一下不重合的部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值