tensorflow LSTM实现sin(x)预测

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顶部的放大, 看一下不重合的部分

您可以使用TensorFlow创建一个LSTM模型来预测正弦函数的值。下面是一个简单的示例代码: ```python import numpy as np import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense # 生成正弦函数数据 sequence_length = 100 x = np.linspace(0, 2 * np.pi, num=sequence_length) y = np.sin(x) # 将数据转换为LSTM模型的输入格式 data = np.array([y[i:i+3] for i in range(len(y)-3)]) x_train = data[:, :-1] y_train = data[:, -1] # 创建并训练LSTM模型 model = Sequential() model.add(LSTM(32, input_shape=(2, 1))) # 输入维度为2,输出维度为1 model.add(Dense(1)) model.compile(optimizer='adam', loss='mse') model.fit(x_train[:, :, np.newaxis], y_train[:, np.newaxis], epochs=100) # 使用模型进行预测 x_test = np.array([[y[-2], y[-1]]]) y_pred = model.predict(x_test[np.newaxis, :, np.newaxis]) print("预测的下一个正弦值:", y_pred[0, 0]) ``` 在这个示例中,我们首先生成了一个包含100个正弦函数值的序列。然后,我们将序列转换为LSTM模型的输入格式,即每个样本包含连续的三个正弦函数值,用前两个值预测下一个值。接下来,我们创建了一个简单的LSTM模型,包含一个LSTM层和一个全连接层。最后,我们使用生成的模型对最后两个正弦函数值进行预测,并输出预测的下一个正弦值。 请注意,这只是一个简单的示例,实际应用中可能需要更复杂的模型和更多的数据来获得更好的预测效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值