Jeremiah_

LSTM-a1_temperatura.py

Sep 30th, 2019
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.42 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Created on Sat Sep 28 22:57:42 2019
  5.  
  6. @author: jeremiah
  7. """
  8. #%%
  9. import torch as t
  10. from torch import nn
  11. import numpy as np
  12. import pandas as pd
  13. import matplotlib.pyplot as plt
  14. %matplotlib inline
  15.  
  16.  
  17. #%% reading the data
  18.  
  19. df = pd.read_csv('/home/jeremiah/data_analysis/datasets/time-series-pam/a1_temperatura.csv', index_col = 0)
  20.  
  21. df.head()
  22. uba_data = np.zeros(len(df['Ubatuba']))
  23. uba_data = df['Ubatuba'].values
  24.  
  25. #%%
  26.  
  27. train_data, val_data = uba_data[:100], uba_data[100:]
  28.  
  29.  
  30. x_train, y_train = train_data[:-1], train_data[1:]
  31.  
  32. x_val, y_val = val_data[:-1], val_data[1:]
  33.  
  34. plt.plot(x_train, 'r')
  35. plt.plot(y_train, 'b')
  36.  
  37.  
  38. #%%
  39.  
  40. class RNN(nn.Module):
  41.     def __init__(self, input_size, hidden_size, n_layers, dropout_p = 0.5):
  42.         super().__init__()
  43.         self.hidden_size = hidden_size
  44.        
  45.         self.lstm = nn.LSTM(input_size, self.hidden_size, n_layers, batch_first = True)
  46.        
  47.         self.fc = nn.Linear(self.hidden_size, 1)
  48.        
  49.         self.dropout = nn.Dropout(dropout_p)
  50.        
  51.     def forward(self, x, h):
  52.        
  53.         out, h = self.lstm(x, h)
  54.        
  55.         out = self.dropout(out)
  56.        
  57.         out = out.view(-1, self.hidden_size)
  58.        
  59.         out = self.fc(out)
  60.        
  61.         return out, h
  62.    
  63. #%%
  64. input_size = 1
  65. hidden_size = 16
  66. n_layers = 1
  67.  
  68. net = RNN(input_size, hidden_size, n_layers)
  69. print(net)
  70.        
  71. #%%
  72. from torch import optim
  73.  
  74. criterion = nn.MSELoss()
  75. op = optim.Adam(net.parameters(), lr=0.001)
  76.  
  77. #%%
  78.  
  79. def train(net, steps, print_every, x, y):
  80.     weight = next(net.parameters()).data
  81.     hidden = (weight.new(1, 1, 16).zero_(), weight.new(1, 1, 16).zero_())
  82.     for s in range(steps):
  83.         x = t.Tensor(x)
  84.         x = x.view(1, 99, 1)
  85.         y = t.Tensor(y)
  86.        
  87.         hidden = tuple([each.data for each in hidden])
  88.         print(x.shape)
  89.         out, hidden = net(x, hidden)
  90.         y = y.view(*out.shape)
  91.         print(out.shape)
  92.         print(y.shape)
  93.        
  94.         loss = criterion(out, y)
  95.         op.zero_grad()
  96.         loss.backward()
  97.         op.step()
  98.        
  99.         if s % print_every == 0:
  100.            
  101.             plt.plot(x.view(-1), 'r')
  102.             plt.plot(out.data, 'g')
  103.             plt.plot(y, 'b')
  104.             plt.show()
  105.    
  106.     return net
  107.  
  108. #%%
  109. steps = 5
  110. print_every = 1
  111.  
  112.  
  113. net = train(net, steps, print_every, x_train, y_train)
Advertisement
Add Comment
Please, Sign In to add comment