python pytorch使用LSTM通过正弦函数值来预测余弦函数的值分布代码
代码语言:python
所属分类:人工智能
代码描述:python pytorch使用LSTM通过正弦函数值来预测余弦函数的值分布代码,我们取正弦函数的值作为LSTM的输入,来预测余弦函数的值。基于Pytorch来构建LSTM模型,采用1个输入神经元,1个输出神经元,16个隐藏神经元作为LSTM网络的构成参数,平均绝对误差(LMSE)作为损失误差,使用Adam优化算法来训练LSTM神经网络。
代码标签: python pytorch LSTM 正弦 函数 预测 余弦 函数 分布代
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
#!/usr/local/python3/bin/python3 # -*- coding: utf-8 -* import numpy as np import torch from torch import nn import matplotlib.pyplot as plt # Define LSTM Neural Networks class LstmRNN(nn.Module): """ Parameters: - input_size: feature size - hidden_size: number of hidden units - output_size: number of output - num_layers: layers of LSTM to stack """ def __init__(self, input_size, hidden_size=1, output_size=1, num_layers=1): super().__init__() self.lstm = nn.LSTM(input_size, hidden_size, num_layers) # utilize the LSTM model in torch.nn self.forwardCalculation = nn.Linear(hidden_size, output_size) def forward(self, _x): x, _ = self.lstm(_x) # _x is input, size (seq_len, batch, input_size) s, b, h = x.shape # x is output, size (seq_len, batch, hidden_size) x = x.view(s*b, h) x = self.forwardCalculation(x) x = x.view(s, b, -1) return x if __name__ == '__main__': # create database data_len = 200 t = np.linspace(0, 12*np.pi, data_len) sin_t = np.sin(t) cos_t = np.cos(t) dataset = np.zeros((data_len, 2)) dataset[:,0] = sin_t dataset[:,1] = cos_t dataset = dataset.astype('float32') # plot part of the original dataset plt.figure() plt.plot(t[0:60], dataset[0:60,0], label='sin(t)') plt.plot(t[0:60], dataset[0:60,1], label = 'cos(t)') plt.plot([2.5, 2.5], [-1.3, 0.55], 'r--', label='t = 2.5') # t = 2.5 plt.plot([6.8, 6.8], [-1.3, 0.85], 'm--', label='t = 6.8') # t = 6.8 plt.xlabel('t') plt.ylim(-1.2, 1.2) plt.ylabel('sin(t) and cos(t)') plt.legend(loc='upper right') # choose dataset for training and testing train_data_ratio = 0.5 # Choose 80% of the data for testing train_data_len = int(data_len*train_data_ratio) train_x = dataset[:train_data_len, 0] train_y = dataset[:train_data_len, 1] INPUT_FEATURES_NUM = 1 OUTPUT_FEATURES_NUM = 1 t_for_training = t[:train_data_len] # test_x = train_x # test_y = train_y test_x = dataset[train_data_len:, 0] test_y = dataset[train_data_len:, 1] t_for_testing = t[train_data_len:] # ----------------- train ------------------- train_x_tensor = train_x.reshape(-1, 5, INPUT_FEATURES_NUM) # set batch size to 5 train_y_tensor = train_y.reshape(-1, 5, OUTPUT_FEATURES_NUM) # set batch size to 5 # transfer data to pytorch tensor train_x_tensor = torch.from_numpy(train_x_tensor) train_y_tensor = torch.from_numpy(train_y_tensor) # test_x_tensor = torch.from_numpy(test_x) lstm_model = LstmRNN(INPUT_FEATURES_NUM, 16, output_size=OUTPUT_FEATURES_NUM, num_layers=1) # 16 hidden units print(.........完整代码请登录后点击上方下载按钮下载查看
网友评论0