diff --git a/2_pytorch/3_RNN/time-series/lstm-time-series.ipynb b/2_pytorch/3_RNN/time-series/lstm-time-series.ipynb index cfbd47e..f85ed7e 100644 --- a/2_pytorch/3_RNN/time-series/lstm-time-series.ipynb +++ b/2_pytorch/3_RNN/time-series/lstm-time-series.ipynb @@ -18,9 +18,7 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -32,9 +30,7 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "data_csv = pd.read_csv('./data.csv', usecols=[1])" @@ -42,27 +38,29 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 4, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -79,10 +77,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": true - }, + "execution_count": 4, + "metadata": {}, "outputs": [], "source": [ "# 数据预处理\n", @@ -104,10 +100,8 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": true - }, + "execution_count": 5, + "metadata": {}, "outputs": [], "source": [ "def create_dataset(dataset, look_back=2):\n", @@ -121,7 +115,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -131,10 +125,8 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": true - }, + "execution_count": 7, + "metadata": {}, "outputs": [], "source": [ "# 划分训练集和测试集,70% 作为训练集\n", @@ -147,6 +139,26 @@ ] }, { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(99, 1)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_Y.shape" + ] + }, + { "cell_type": "markdown", "metadata": {}, "source": [ @@ -156,9 +168,7 @@ { "cell_type": "code", "execution_count": 11, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "import torch\n", @@ -175,9 +185,7 @@ { "cell_type": "code", "execution_count": 12, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "from torch import nn\n", @@ -194,9 +202,7 @@ { "cell_type": "code", "execution_count": 16, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "# 定义模型\n", @@ -283,9 +289,7 @@ { "cell_type": "code", "execution_count": 22, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "net = net.eval() # 转换成测试模式" diff --git a/2_pytorch/3_RNN/time-series/lstm-time-series.py b/2_pytorch/3_RNN/time-series/lstm-time-series.py index b6fc956..653b9c5 100644 --- a/2_pytorch/3_RNN/time-series/lstm-time-series.py +++ b/2_pytorch/3_RNN/time-series/lstm-time-series.py @@ -64,6 +64,8 @@ train_Y = data_Y[:train_size] test_X = data_X[train_size:] test_Y = data_Y[train_size:] +train_Y.shape + # 最后,我们需要将数据改变一下形状,因为 RNN 读入的数据维度是 (seq, batch, feature),所以要重新改变一下数据的维度,这里只有一个序列,所以 batch 是 1,而输入的 feature 就是我们希望依据的几个月份,这里我们定的是两个月份,所以 feature 就是 2. # + diff --git a/demo_code/4_LSTM_timeseries.py b/demo_code/4_LSTM_timeseries.py new file mode 100644 index 0000000..df5a07c --- /dev/null +++ b/demo_code/4_LSTM_timeseries.py @@ -0,0 +1,117 @@ + +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt + +import torch +from torch import nn +from torch.autograd import Variable + + +""" +Using torch to do time series analysis by LSTM model +""" + +# load data +data_csv = pd.read_csv("./lstm_data.csv", usecols=[1]) + +#plt.plot(data_csv) +#plt.show() + +# data pre-processing +data_csv = data_csv.dropna() +dataset = data_csv.values +dataset = dataset.astype("float32") +val_max = np.max(dataset) +val_min = np.min(dataset) +val_scale = val_max - val_min +dataset = (dataset - val_min) / val_scale + + +# generate dataset +def create_dataset(dataset, look_back=6): + dataX, dataY = [], [] + dataset = dataset.tolist() + for i in range(len(dataset) - look_back): + a = dataset[i:(i+look_back)] + dataX.append(a) + dataY.append(dataset[i+look_back]) + + return np.array(dataX), np.array(dataY) + +look_back = 1 +data_X, data_Y = create_dataset(dataset, look_back) + + +# split train/test dataset +train_size = int(len(data_X) * 0.7) +test_size = len(data_X) - train_size + +train_X = data_X[:train_size] +train_Y = data_Y[:train_size] +test_X = data_X[train_size:] +test_Y = data_Y[train_size:] + + +# convert data for torch +train_X = train_X.reshape(-1, 1, look_back) +train_Y = train_Y.reshape(-1, 1, 1) +test_X = test_X.reshape(-1, 1, look_back) + +train_x = torch.from_numpy(train_X).float() +train_y = torch.from_numpy(train_Y).float() +test_x = torch.from_numpy(test_X).float() + +# define LSTM model +class LSTM_Reg(nn.Module): + def __init__(self, input_size, hidden_size, output_size=1, num_layer=2): + super(LSTM_Reg, self).__init__() + + self.rnn = nn.LSTM(input_size, hidden_size, num_layer) + self.reg = nn.Linear(hidden_size, output_size) + + def forward(self, x): + x, _ = self.rnn(x) + s, b, h = x.shape + x = x.view(s*b, h) + x = self.reg(x) + x = x.view(s, b, -1) + return x + +net = LSTM_Reg(look_back, 4, num_layer=1) +criterion = nn.MSELoss() +optimizer = torch.optim.Adam(net.parameters(), lr=1e-2) + + +for e in range(1000): + var_x = Variable(train_x) + var_y = Variable(train_y) + + # forward + out = net(var_x) + loss = criterion(out, var_y) + + # backward + optimizer.zero_grad() + loss.backward() + optimizer.step() + + # print progress + if e % 100 == 0: + print("epoch: %5d, loss: %.5f" % (e, loss.data[0])) + +# do test +net = net.eval() + +data_X = data_X.reshape(-1, 1, look_back) +data_X = torch.from_numpy(data_X).float() +var_data = Variable(data_X) +pred_test = net(var_data) + +pred_test = pred_test.view(-1).data.numpy() + +# plot +plt.plot(pred_test, 'r', label="Prediction") +plt.plot(dataset, 'b', label="Real") +plt.legend(loc="best") +plt.show() \ No newline at end of file diff --git a/demo_code/lstm_data.csv b/demo_code/lstm_data.csv new file mode 100644 index 0000000..bf7171d --- /dev/null +++ b/demo_code/lstm_data.csv @@ -0,0 +1,148 @@ +"Month","International airline passengers: monthly totals in thousands. Jan 49 ? Dec 60" +"1949-01",112 +"1949-02",118 +"1949-03",132 +"1949-04",129 +"1949-05",121 +"1949-06",135 +"1949-07",148 +"1949-08",148 +"1949-09",136 +"1949-10",119 +"1949-11",104 +"1949-12",118 +"1950-01",115 +"1950-02",126 +"1950-03",141 +"1950-04",135 +"1950-05",125 +"1950-06",149 +"1950-07",170 +"1950-08",170 +"1950-09",158 +"1950-10",133 +"1950-11",114 +"1950-12",140 +"1951-01",145 +"1951-02",150 +"1951-03",178 +"1951-04",163 +"1951-05",172 +"1951-06",178 +"1951-07",199 +"1951-08",199 +"1951-09",184 +"1951-10",162 +"1951-11",146 +"1951-12",166 +"1952-01",171 +"1952-02",180 +"1952-03",193 +"1952-04",181 +"1952-05",183 +"1952-06",218 +"1952-07",230 +"1952-08",242 +"1952-09",209 +"1952-10",191 +"1952-11",172 +"1952-12",194 +"1953-01",196 +"1953-02",196 +"1953-03",236 +"1953-04",235 +"1953-05",229 +"1953-06",243 +"1953-07",264 +"1953-08",272 +"1953-09",237 +"1953-10",211 +"1953-11",180 +"1953-12",201 +"1954-01",204 +"1954-02",188 +"1954-03",235 +"1954-04",227 +"1954-05",234 +"1954-06",264 +"1954-07",302 +"1954-08",293 +"1954-09",259 +"1954-10",229 +"1954-11",203 +"1954-12",229 +"1955-01",242 +"1955-02",233 +"1955-03",267 +"1955-04",269 +"1955-05",270 +"1955-06",315 +"1955-07",364 +"1955-08",347 +"1955-09",312 +"1955-10",274 +"1955-11",237 +"1955-12",278 +"1956-01",284 +"1956-02",277 +"1956-03",317 +"1956-04",313 +"1956-05",318 +"1956-06",374 +"1956-07",413 +"1956-08",405 +"1956-09",355 +"1956-10",306 +"1956-11",271 +"1956-12",306 +"1957-01",315 +"1957-02",301 +"1957-03",356 +"1957-04",348 +"1957-05",355 +"1957-06",422 +"1957-07",465 +"1957-08",467 +"1957-09",404 +"1957-10",347 +"1957-11",305 +"1957-12",336 +"1958-01",340 +"1958-02",318 +"1958-03",362 +"1958-04",348 +"1958-05",363 +"1958-06",435 +"1958-07",491 +"1958-08",505 +"1958-09",404 +"1958-10",359 +"1958-11",310 +"1958-12",337 +"1959-01",360 +"1959-02",342 +"1959-03",406 +"1959-04",396 +"1959-05",420 +"1959-06",472 +"1959-07",548 +"1959-08",559 +"1959-09",463 +"1959-10",407 +"1959-11",362 +"1959-12",405 +"1960-01",417 +"1960-02",391 +"1960-03",419 +"1960-04",461 +"1960-05",472 +"1960-06",535 +"1960-07",622 +"1960-08",606 +"1960-09",508 +"1960-10",461 +"1960-11",390 +"1960-12",432 + +International airline passengers: monthly totals in thousands. Jan 49 ? Dec 60 +