TensorFlow对于sin函数的预测----RNN模型

一、总体介绍
对于sin函数的输入样本进行训练,得到sin函数相关的RNN网络架构,预测sin函数的趋势
二、相关参数设置

HIDDEN_SIZE     = 30      #隐藏层层数
NUM_LAYERS      = 2       #RNN层数
TIMESTEPS       = 10      #RNN的截断长度 利用10个点的信息  预测第11个点的信息
TRAIN_STEP      = 10000   #训练轮数    
TRAIN_EXAMPLES  = 10000   #训练数据的个数
BATCH_SIZE      = 32      #训练的batch  

TEST_EXAMPLES   = 10000   #测试数据的个数
SAMPLE_GAP      = 0.01
LEARNNING_RATE  = 0.1     #学习率

三、模拟数据产生函数

def generate_data(seq):
    x = []
    y = []
    for i in range(len(seq) - TIMESTEPS):
        x.append([seq[i:i+TIMESTEPS]])
        y.append([seq[i+TIMESTEPS]])

    return np.array(x,dtype = np.float32),  np.array(y,dtype = np.float32)

四、构建基础LSTM单元(单层)函数

def LstmCell():
    lstm_cell = rnn.BasicLSTMCell(HIDDEN_SIZE,state_is_tuple=True)
    return lstm_cell

五、构建RNN–多层LSTM模型函数
5.1 构建多层LSTM模型

cell  = rnn.MultiRNNCell([LstmCell() for _ in range(NUM_LAYERS)])

5.2 训练rnn,output为输出的结果,_ 返回的是最终的状态

output,_ = tf.nn.dynamic_rnn(cell,x,dtype=tf.float32)

5.3将output 重塑成 n×HIDDEN_SIZE 的矩阵,即每行属于同一层

output   = tf.reshape(output,[-1, HIDDEN_SIZE])

5.4 创建一个全连接层,1 表示输出的维度为1,即做的是 n×HIDDEN_SIZE 的矩阵 和 HIDDEN_SIZE×1的矩阵相乘。None指的是不使用激活函数。

predictions = tf.contrib.layers.fully_connected(output, 1, None)

5.5取出最后一个数 即最终的输出结果

labels      = tf.reshape(y, [-1])  #期望值
predictions = tf.reshape(predictions, [-1]) #预测值

5.6 得到均方损失

loss = tf.losses.mean_squared_error(predictions, labels)

5.7 优化函数

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

六、搭建总体框架
6.1 建立多层RNN

regressor = learn.Estimator(model_fn = lstm_model)

这里利用到了learn的Estimator函数 传入参数为lstm_model构建RNN–多层LSTM模型的函数
6.2 产生数据

test_start =  TRAIN_EXAMPLES * SAMPLE_GAP
test_end   = (TRAIN_EXAMPLES + TEST_EXAMPLES)* SAMPLE_GAP
#产生仿真数据x  y 用于训练
train_x,train_y = generate_data(np.sin(np.linspace(0,        test_start,
				  TRAIN_EXAMPLES,dtype = np.float32)))
#产生仿真数据x  y 用于测试
test_x,test_y   = generate_data(np.sin(np.linspace(test_start,test_end, 
				  TEST_EXAMPLES, dtype = np.float32)))

6.3 调用fit函数训练模型

regressor.fit(train_x,train_y,batch_size = BATCH_SIZE,steps = TRAIN_STEP)

6.4 利用训练好的模型进行预测 计算均方差

predicted = [[pred] for pred in regressor.predict(test_x)]
rmse      = np.sqrt((predicted-test_y)**2).mean(axis=0)

6.5 绘图

fig = plt.figure()
plot_predicted  = plt.plot(predicted,label = "predicted",color='red')
plot_test       = plt.plot(test_y,label = "real_sin",color='blue')
plt.legend      = ([plot_predicted,plot_test],['predicted','real_sin'])
plt.show()

七、结果

这里写图片描述
看细节
这里写图片描述

最近新开的公众号,文章正在一篇篇的更新,

公众号名称:玩转电子世界。

各位朋友有什么问题了可以直接在上面提问,我会一一进行解答的。

跟着阳光非宅男,一步步走进电子的世界。

在这里插入图片描述

关注之后回复 资料下载 关键词可以获得免费的视频学习资料下载~~~~!!

源码下载:http://download.csdn.net/download/yunge812/10269571

已共享的学习视频资料,共享资料正在不断更新中。
在这里插入图片描述
共享机器学习/tensorflow视频学习资料:
在这里插入图片描述

好的,我可以为您解答。首先,您需要安装一些必要的库,包括 TensorFlow、Keras、NumPy 和 Matplotlib。请在命令行输入以下命令来安装它们: ``` pip install tensorflow keras numpy matplotlib ``` 然后,您可以按照以下步骤进行操作: 1. 导入必要的库: ```python import numpy as np import matplotlib.pyplot as plt from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, LSTM ``` 2. 定义一些超参数: ```python seq_len = 100 # 序列长度 step = 0.1 # 步长 input_size = 1 # 输入维度 output_size = 1 # 输出维度 hidden_size = 32 # 隐藏层维度 batch_size = 32 # 批量大小 epochs = 100 # 训练次数 ``` 3. 生成训练数据: ```python def generate_data(seq_len): seq = np.arange(0, seq_len * step, step) seq = np.sin(seq) return seq.reshape(-1, 1) train_data = generate_data(seq_len) ``` 4. 准备数据: ```python def create_dataset(data, seq_len): X = [] y = [] for i in range(len(data) - seq_len): X.append(data[i:i+seq_len]) y.append(data[i+seq_len]) return np.array(X), np.array(y) X_train, y_train = create_dataset(train_data, seq_len) ``` 5. 定义模型: ```python model = Sequential() model.add(LSTM(hidden_size, input_shape=(seq_len, input_size))) model.add(Dense(output_size)) model.compile(optimizer='adam', loss='mse') ``` 6. 训练模型: ```python history = model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs) ``` 7. 可视化损失函数: ```python plt.plot(history.history['loss']) plt.title('Model loss') plt.ylabel('Loss') plt.xlabel('Epoch') plt.show() ``` 最后,您可以使用模型预测正弦函数并可视化结果: ```python test_data = generate_data(seq_len * 2) X_test, y_test = create_dataset(test_data, seq_len) y_pred = model.predict(X_test) plt.plot(test_data) plt.plot(range(seq_len, seq_len * 3), y_pred) plt.title('Predicted vs. actual') plt.legend(['Actual', 'Predicted']) plt.show() ``` 这将显示一个包含实际正弦函数模型预测值的图形。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光非宅男

你的鼓励是我最大的肯定

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值