用python写一个rnn代码,要求体现每一步公式,输入为正弦函数的值,预测后续的数据且每一步完成后都输出结果图
时间: 2024-02-13 07:00:14 浏览: 114
python 图像处理画一个正弦函数代码实例
5星 · 资源好评率100%
好的,以下是一个使用Python和TensorFlow实现的简单的RNN代码,用于预测正弦函数的下一个值并输出每一步的结果图:
```
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# 定义超参数
n_steps = 20
n_inputs = 1
n_neurons = 100
n_outputs = 1
learning_rate = 0.01
n_epochs = 1000
# 生成正弦函数数据
t_min, t_max = 0, 30
resolution = 0.1
t = np.linspace(t_min, t_max, int((t_max - t_min) / resolution))
sin_wave = np.sin(t)
# 划分输入和输出序列
X = []
Y = []
for i in range(len(sin_wave) - n_steps):
X.append(sin_wave[i:i+n_steps])
Y.append(sin_wave[i+1:i+n_steps+1])
X = np.array(X).reshape(-1, n_steps, n_inputs)
Y = np.array(Y).reshape(-1, n_steps, n_outputs)
# 定义RNN模型
inputs = tf.keras.layers.Input(shape=[None, n_inputs])
rnn_layer = tf.keras.layers.SimpleRNN(n_neurons, return_sequences=True)
outputs = rnn_layer(inputs)
model = tf.keras.models.Model(inputs=[inputs], outputs=[outputs])
optimizer = tf.keras.optimizers.Adam(lr=learning_rate)
model.compile(loss='mse', optimizer=optimizer)
# 训练模型
for epoch in range(n_epochs):
model.fit(X, Y, epochs=1, verbose=0)
if epoch % 100 == 0:
print('Epoch:', epoch)
# 预测并绘制结果图
y_pred = model.predict(X)
plt.plot(t[:len(Y[0])], Y[0].flatten(), 'r', label='Actual Data')
plt.plot(t[:len(Y[0])], y_pred[0].flatten(), 'b', label='Predicted Data')
plt.legend()
plt.show()
```
在这个代码中,我们首先生成正弦函数的数据,然后将其划分为输入和输出序列。我们使用TensorFlow的SimpleRNN层来定义RNN模型,并使用MSE损失和Adam优化器来训练模型。在每个时期结束时,我们使用训练数据来预测模型,并绘制预测结果图。您可以看到,代码中的绘图部分在每个时期结束时都会运行,以便您可以查看每个时期的预测结果。
阅读全文