Skip to content

Instantly share code, notes, and snippets.

@JuYoungAhn
Last active August 24, 2016 08:24
Show Gist options
  • Save JuYoungAhn/70626f18773676e63782e4a6f81f5686 to your computer and use it in GitHub Desktop.
Save JuYoungAhn/70626f18773676e63782e4a6f81f5686 to your computer and use it in GitHub Desktop.
Using lstm function estimation on Redd Dataset
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# coding: utf-8\n",
"# Redd House2 Dataset NILM J.Y.Ahn\n",
"%matplotlib inline\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import datetime\n",
"import tensorflow as tf\n",
"from lstm import x_sin, generate_data, generate_data2, lstm_model\n",
"from tensorflow.contrib import learn\n",
"from sklearn.metrics import mean_squared_error"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Read File\n",
"df = pd.read_csv('house2.csv')\n",
"df['agg_power'] = df.channel_1 + df.channel_2 # agg_power 정의\n",
"df['date'] = np.array([datetime.datetime.now() for x in df.timestamp])# date 초기화\n",
"date_temp = np.array([datetime.datetime.now() for x in df.timestamp])# date_temp 초기화\n",
"for i in range (0,len(df.timestamp)) :\n",
" date_temp[i] = datetime.datetime.fromtimestamp(int(str(df['timestamp'][i]))) # timstamp를 실제 날짜로 변환\n",
"\n",
"df['date'] = date_temp # date_temp를 dataframe의 date column으로 copy\n",
"\n",
"trX = df[['channel_3', 'channel_4', 'channel_5', 'channel_6', 'channel_7', 'channel_8', 'channel_9', 'channel_10', 'channel_11']]\n",
"trY = df['agg_power']"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Unnamed: 0 timestamp channel_1 channel_2 channel_3 channel_4 \\\n",
"0 0 1303104700 15.71 22.61 1.0 8.0 \n",
"1 1 1303104704 15.71 22.61 0.0 8.0 \n",
"2 2 1303104707 15.72 22.61 1.0 8.0 \n",
"3 3 1303104710 15.70 22.57 0.0 8.0 \n",
"4 4 1303104725 15.64 22.61 1.0 8.0 \n",
"\n",
" channel_5 channel_6 channel_7 channel_8 channel_9 channel_10 \\\n",
"0 1.0 4.0 4.0 4.0 6.0 1.0 \n",
"1 1.0 5.0 5.0 4.0 6.0 0.0 \n",
"2 1.0 4.0 4.0 4.0 6.0 1.0 \n",
"3 1.0 4.0 4.0 3.0 7.0 0.0 \n",
"4 1.0 4.0 4.0 3.0 7.0 1.0 \n",
"\n",
" channel_11 agg_power date \n",
"0 0.0 38.32 2011-04-18 14:31:40 \n",
"1 0.0 38.32 2011-04-18 14:31:44 \n",
"2 0.0 38.33 2011-04-18 14:31:47 \n",
"3 0.0 38.27 2011-04-18 14:31:50 \n",
"4 0.0 38.25 2011-04-18 14:32:05 \n"
]
}
],
"source": [
"print df[0:5]"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11bd0ed10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(df['agg_power'][0:10000]) # 전체 전력 소모량\n",
"plt.plot(df['channel_9'][0:10000]) # 냉장고 전력 소모량 \n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:tensorflow:Using temporary folder as model directory: /var/folders/9k/mvp8gkgn1ds17xfs85bvmzd80000gn/T/tmpyrtU1d\n",
"INFO:tensorflow:Using temporary folder as model directory: /var/folders/9k/mvp8gkgn1ds17xfs85bvmzd80000gn/T/tmpyrtU1d\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Training steps [2101,10000)\n",
"INFO:tensorflow:Training steps [2101,10000)\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 2102): loss = 244657.0\n",
"INFO:tensorflow:Validation (step 2102): loss = 244657.0\n",
"INFO:tensorflow:Step 2102: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 94591.1\n",
"INFO:tensorflow:Step 2102: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 94591.1\n",
"INFO:tensorflow:training step 2201, loss = 25600.67578 (0.009 sec/batch).\n",
"INFO:tensorflow:training step 2201, loss = 25600.67578 (0.009 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 2202): loss = 244657.0\n",
"INFO:tensorflow:Validation (step 2202): loss = 244657.0\n",
"INFO:tensorflow:Step 2202: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 54642.6\n",
"INFO:tensorflow:Step 2202: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 54642.6\n",
"INFO:tensorflow:training step 2301, loss = 49981.89844 (0.009 sec/batch).\n",
"INFO:tensorflow:training step 2301, loss = 49981.89844 (0.009 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 2302): loss = 244657.0\n",
"INFO:tensorflow:Validation (step 2302): loss = 244657.0\n",
"INFO:tensorflow:Step 2302: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 22643.5\n",
"INFO:tensorflow:Step 2302: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 22643.5\n",
"INFO:tensorflow:training step 2401, loss = 54483.53125 (0.009 sec/batch).\n",
"INFO:tensorflow:training step 2401, loss = 54483.53125 (0.009 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 2402): loss = 244657.0\n",
"INFO:tensorflow:Validation (step 2402): loss = 244657.0\n",
"INFO:tensorflow:Step 2402: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 29710.1\n",
"INFO:tensorflow:Step 2402: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 29710.1\n",
"INFO:tensorflow:training step 2501, loss = 38441.69922 (0.009 sec/batch).\n",
"INFO:tensorflow:training step 2501, loss = 38441.69922 (0.009 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 2502): loss = 244657.0\n",
"INFO:tensorflow:Validation (step 2502): loss = 244657.0\n",
"INFO:tensorflow:Step 2502: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 54023.1\n",
"INFO:tensorflow:Step 2502: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 54023.1\n",
"INFO:tensorflow:training step 2601, loss = 43166.69531 (0.009 sec/batch).\n",
"INFO:tensorflow:training step 2601, loss = 43166.69531 (0.009 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 2602): loss = 244657.0\n",
"INFO:tensorflow:Validation (step 2602): loss = 244657.0\n",
"INFO:tensorflow:Step 2602: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 23150.8\n",
"INFO:tensorflow:Step 2602: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 23150.8\n",
"INFO:tensorflow:training step 2701, loss = 104323.17188 (0.009 sec/batch).\n",
"INFO:tensorflow:training step 2701, loss = 104323.17188 (0.009 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 2702): loss = 244657.0\n",
"INFO:tensorflow:Validation (step 2702): loss = 244657.0\n",
"INFO:tensorflow:Step 2702: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 44459.1\n",
"INFO:tensorflow:Step 2702: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 44459.1\n",
"INFO:tensorflow:training step 2801, loss = 105428.72656 (0.010 sec/batch).\n",
"INFO:tensorflow:training step 2801, loss = 105428.72656 (0.010 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 2802): loss = 244657.0\n",
"INFO:tensorflow:Validation (step 2802): loss = 244657.0\n",
"INFO:tensorflow:Step 2802: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 73210.0\n",
"INFO:tensorflow:Step 2802: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 73210.0\n",
"INFO:tensorflow:training step 2901, loss = 27431.64062 (0.009 sec/batch).\n",
"INFO:tensorflow:training step 2901, loss = 27431.64062 (0.009 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 2902): loss = 244657.0\n",
"INFO:tensorflow:Validation (step 2902): loss = 244657.0\n",
"INFO:tensorflow:Step 2902: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 28723.9\n",
"INFO:tensorflow:Step 2902: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 28723.9\n",
"INFO:tensorflow:training step 3001, loss = 90217.67188 (0.009 sec/batch).\n",
"INFO:tensorflow:training step 3001, loss = 90217.67188 (0.009 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 3002): loss = 244657.0\n",
"INFO:tensorflow:Validation (step 3002): loss = 244657.0\n",
"INFO:tensorflow:Step 3002: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 38420.3\n",
"INFO:tensorflow:Step 3002: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 38420.3\n",
"INFO:tensorflow:training step 3101, loss = 28740.89453 (0.009 sec/batch).\n",
"INFO:tensorflow:training step 3101, loss = 28740.89453 (0.009 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs2/model.ckpt-2101-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 2101.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 3102): loss = 244657.0\n",
"INFO:tensorflow:Validation (step 3102): loss = 244657.0\n",
"INFO:tensorflow:Stopping. Best step: 2102 with loss 244657.484375.\n",
"INFO:tensorflow:Stopping. Best step: 2102 with loss 244657.484375.\n",
"INFO:tensorflow:Step 3102: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 28623.2\n",
"INFO:tensorflow:Step 3102: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 28623.2\n",
"INFO:tensorflow:Saving checkpoint for step 3102 to checkpoint: ./ops_logs2/model.ckpt.\n",
"INFO:tensorflow:Saving checkpoint for step 3102 to checkpoint: ./ops_logs2/model.ckpt.\n"
]
},
{
"data": {
"text/plain": [
"TensorFlowEstimator(continue_training=False, optimizer=Adagrad, verbose=1, learning_rate=0.5, batch_size=100, steps=10000, n_classes=0, params=None, clip_gradients=5.0, class_weight=None)"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"LOG_DIR = './ops_logs'\n",
"TIMESTEPS = 10\n",
"RNN_LAYERS = [{'steps': TIMESTEPS}]\n",
"DENSE_LAYERS = None\n",
"TRAINING_STEPS = 10000\n",
"BATCH_SIZE = 100\n",
"PRINT_STEPS = TRAINING_STEPS / 100\n",
"\n",
"regressor = learn.TensorFlowEstimator(model_fn=lstm_model(TIMESTEPS, RNN_LAYERS, DENSE_LAYERS), n_classes=0,\n",
" verbose=1, steps=TRAINING_STEPS, optimizer='Adagrad',\n",
" learning_rate=0.5, batch_size=BATCH_SIZE)\n",
"\n",
"X, y = generate_data2(df['agg_power'][0:10000], TIMESTEPS, seperate=False)\n",
"\n",
"# create a lstm instance and validation monitor\n",
"validation_monitor = learn.monitors.ValidationMonitor(X['val'], y['val'],\n",
" every_n_steps=PRINT_STEPS,\n",
" early_stopping_rounds=1000)\n",
"\n",
"regressor.fit(X['train'], y['train'], monitors=[validation_monitor], logdir=LOG_DIR+\"2\")"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:tensorflow:Loading model from checkpoint: ./ops_logs2/model.ckpt-3102-?????-of-00001.\n",
"INFO:tensorflow:Loading model from checkpoint: ./ops_logs2/model.ckpt-3102-?????-of-00001.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"MSE: 410697.760878\n"
]
}
],
"source": [
"predicted = regressor.predict(X['test'])\n",
"rmse = np.sqrt(((predicted - y['test']) ** 2).mean(axis=0))\n",
"score = mean_squared_error(predicted, y['test'])\n",
"print (\"MSE: %f\" % score)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11750dad0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(predicted)\n",
"plt.plot(y['test'], color=\"black\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:tensorflow:Using temporary folder as model directory: /var/folders/9k/mvp8gkgn1ds17xfs85bvmzd80000gn/T/tmpqYtwsd\n",
"INFO:tensorflow:Using temporary folder as model directory: /var/folders/9k/mvp8gkgn1ds17xfs85bvmzd80000gn/T/tmpqYtwsd\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"start\n",
"0.841470984808\n",
"0.841470984808\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Training steps [8109,10000)\n",
"INFO:tensorflow:Training steps [8109,10000)\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 8110): loss = 0.000520811\n",
"INFO:tensorflow:Validation (step 8110): loss = 0.000520811\n",
"INFO:tensorflow:Step 8110: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000500251\n",
"INFO:tensorflow:Step 8110: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000500251\n",
"INFO:tensorflow:training step 8209, loss = 0.00054 (0.009 sec/batch).\n",
"INFO:tensorflow:training step 8209, loss = 0.00054 (0.009 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 8210): loss = 0.000520811\n",
"INFO:tensorflow:Validation (step 8210): loss = 0.000520811\n",
"INFO:tensorflow:Step 8210: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000385736\n",
"INFO:tensorflow:Step 8210: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000385736\n",
"INFO:tensorflow:training step 8309, loss = 0.00048 (0.011 sec/batch).\n",
"INFO:tensorflow:training step 8309, loss = 0.00048 (0.011 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 8310): loss = 0.000520811\n",
"INFO:tensorflow:Validation (step 8310): loss = 0.000520811\n",
"INFO:tensorflow:Step 8310: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000481509\n",
"INFO:tensorflow:Step 8310: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000481509\n",
"INFO:tensorflow:training step 8409, loss = 0.00047 (0.010 sec/batch).\n",
"INFO:tensorflow:training step 8409, loss = 0.00047 (0.010 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 8410): loss = 0.000520811\n",
"INFO:tensorflow:Validation (step 8410): loss = 0.000520811\n",
"INFO:tensorflow:Step 8410: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000451936\n",
"INFO:tensorflow:Step 8410: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000451936\n",
"INFO:tensorflow:training step 8509, loss = 0.00044 (0.011 sec/batch).\n",
"INFO:tensorflow:training step 8509, loss = 0.00044 (0.011 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 8510): loss = 0.000520811\n",
"INFO:tensorflow:Validation (step 8510): loss = 0.000520811\n",
"INFO:tensorflow:Step 8510: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000400238\n",
"INFO:tensorflow:Step 8510: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000400238\n",
"INFO:tensorflow:training step 8609, loss = 0.00042 (0.010 sec/batch).\n",
"INFO:tensorflow:training step 8609, loss = 0.00042 (0.010 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 8610): loss = 0.000520811\n",
"INFO:tensorflow:Validation (step 8610): loss = 0.000520811\n",
"INFO:tensorflow:Step 8610: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000421907\n",
"INFO:tensorflow:Step 8610: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000421907\n",
"INFO:tensorflow:training step 8709, loss = 0.00045 (0.012 sec/batch).\n",
"INFO:tensorflow:training step 8709, loss = 0.00045 (0.012 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 8710): loss = 0.000520811\n",
"INFO:tensorflow:Validation (step 8710): loss = 0.000520811\n",
"INFO:tensorflow:Step 8710: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000389599\n",
"INFO:tensorflow:Step 8710: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000389599\n",
"INFO:tensorflow:training step 8809, loss = 0.00037 (0.013 sec/batch).\n",
"INFO:tensorflow:training step 8809, loss = 0.00037 (0.013 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 8810): loss = 0.000520811\n",
"INFO:tensorflow:Validation (step 8810): loss = 0.000520811\n",
"INFO:tensorflow:Step 8810: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000421981\n",
"INFO:tensorflow:Step 8810: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000421981\n",
"INFO:tensorflow:training step 8909, loss = 0.00040 (0.012 sec/batch).\n",
"INFO:tensorflow:training step 8909, loss = 0.00040 (0.012 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 8910): loss = 0.000520811\n",
"INFO:tensorflow:Validation (step 8910): loss = 0.000520811\n",
"INFO:tensorflow:Step 8910: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000394109\n",
"INFO:tensorflow:Step 8910: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000394109\n",
"INFO:tensorflow:training step 9009, loss = 0.00036 (0.011 sec/batch).\n",
"INFO:tensorflow:training step 9009, loss = 0.00036 (0.011 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 9010): loss = 0.000520811\n",
"INFO:tensorflow:Validation (step 9010): loss = 0.000520811\n",
"INFO:tensorflow:Step 9010: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000395133\n",
"INFO:tensorflow:Step 9010: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000395133\n",
"INFO:tensorflow:training step 9109, loss = 0.00037 (0.011 sec/batch).\n",
"INFO:tensorflow:training step 9109, loss = 0.00037 (0.011 sec/batch).\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Restored model from ./ops_logs6/model.ckpt-8109-?????-of-00001\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"INFO:tensorflow:Eval steps [0,10000) for training step 8109.\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"WARNING:tensorflow:Input iterator is exhausted: .\n",
"INFO:tensorflow:Validation (step 9110): loss = 0.000520811\n",
"INFO:tensorflow:Validation (step 9110): loss = 0.000520811\n",
"INFO:tensorflow:Stopping. Best step: 8110 with loss 0.000520811008755.\n",
"INFO:tensorflow:Stopping. Best step: 8110 with loss 0.000520811008755.\n",
"INFO:tensorflow:Step 9110: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000373236\n",
"INFO:tensorflow:Step 9110: linear_regression/mean_squared_error_regressor/sum_of_squares_loss/value:0 = 0.000373236\n",
"INFO:tensorflow:Saving checkpoint for step 9110 to checkpoint: ./ops_logs6/model.ckpt.\n",
"INFO:tensorflow:Saving checkpoint for step 9110 to checkpoint: ./ops_logs6/model.ckpt.\n",
"INFO:tensorflow:Loading model from checkpoint: ./ops_logs6/model.ckpt-9110-?????-of-00001.\n",
"INFO:tensorflow:Loading model from checkpoint: ./ops_logs6/model.ckpt-9110-?????-of-00001.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"MSE: 0.000373\n"
]
}
],
"source": [
"# coding: utf-8\n",
"# Function Prediction\n",
"# 2016. 8. 11 J.Y.Ahn\n",
"%matplotlib inline\n",
"import numpy as np\n",
"import pandas as pd\n",
"import tensorflow as tf\n",
"from matplotlib import pyplot as plt\n",
"import math\n",
"from tensorflow.contrib import learn\n",
"from sklearn.metrics import mean_squared_error\n",
"\n",
"from lstm import x_sin, generate_data, lstm_model\n",
"\n",
"print 'start'\n",
"print math.sin(1)\n",
"print np.sin(1)\n",
"\n",
"LOG_DIR = './ops_logs'\n",
"TIMESTEPS = 10\n",
"RNN_LAYERS = [{'steps': TIMESTEPS}]\n",
"DENSE_LAYERS = None\n",
"TRAINING_STEPS = 10000\n",
"BATCH_SIZE = 100\n",
"PRINT_STEPS = TRAINING_STEPS / 100\n",
"\n",
"regressor = learn.TensorFlowEstimator(model_fn=lstm_model(TIMESTEPS, RNN_LAYERS, DENSE_LAYERS), n_classes=0,\n",
" verbose=3, steps=TRAINING_STEPS, optimizer='Adagrad',\n",
" learning_rate=0.01, batch_size=BATCH_SIZE)\n",
"\n",
"def sin_cos(x):\n",
" return pd.DataFrame(dict(a=np.cos(x), b=np.sin(x), c=2*np.sin(x)), index=x)\n",
"\n",
"X, y = generate_data(sin_cos, np.linspace(0, 100, 5000), TIMESTEPS, seperate=False)\n",
"# create a lstm instance and validation monitor\n",
"validation_monitor = learn.monitors.ValidationMonitor(X['val'], y['val'],\n",
" every_n_steps=PRINT_STEPS,\n",
" early_stopping_rounds=1000)\n",
"\n",
"regressor.fit(X['train'][3:], y['train'][3:], monitors=[validation_monitor], logdir=LOG_DIR+\"6\")\n",
"\n",
"predicted = regressor.predict(X['train'])\n",
"rmse = np.sqrt(((predicted - y['train']) ** 2).mean(axis=0))\n",
"score = mean_squared_error(predicted, y['train'])\n",
"\n",
"print (\"MSE: %f\" % score)"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Print Training Data & Plot\n",
"Input Training Data : \n",
" cos(x) sin(x) cos(sin(x)) \n",
"[[[ 0.99979993 0.02000267 0.04000533]\n",
" [ 0.99919979 0.03999733 0.07999466]\n",
" [ 0.99819982 0.05997599 0.11995197]\n",
" [ 0.99680043 0.07993065 0.15986129]\n",
" [ 0.99500217 0.09985332 0.19970664]\n",
" [ 0.99280576 0.11973604 0.23947208]\n",
" [ 0.99021209 0.13957085 0.27914169]\n",
" [ 0.98722218 0.1593498 0.31869961]\n",
" [ 0.98383725 0.179065 0.35813 ]\n",
" [ 0.98005863 0.19870854 0.39741708]]\n",
"\n",
" [[ 0.99919979 0.03999733 0.07999466]\n",
" [ 0.99819982 0.05997599 0.11995197]\n",
" [ 0.99680043 0.07993065 0.15986129]\n",
" [ 0.99500217 0.09985332 0.19970664]\n",
" [ 0.99280576 0.11973604 0.23947208]\n",
" [ 0.99021209 0.13957085 0.27914169]\n",
" [ 0.98722218 0.1593498 0.31869961]\n",
" [ 0.98383725 0.179065 0.35813 ]\n",
" [ 0.98005863 0.19870854 0.39741708]\n",
" [ 0.97588784 0.21827257 0.43654514]]\n",
"\n",
" [[ 0.99819982 0.05997599 0.11995197]\n",
" [ 0.99680043 0.07993065 0.15986129]\n",
" [ 0.99500217 0.09985332 0.19970664]\n",
" [ 0.99280576 0.11973604 0.23947208]\n",
" [ 0.99021209 0.13957085 0.27914169]\n",
" [ 0.98722218 0.1593498 0.31869961]\n",
" [ 0.98383725 0.179065 0.35813 ]\n",
" [ 0.98005863 0.19870854 0.39741708]\n",
" [ 0.97588784 0.21827257 0.43654514]\n",
" [ 0.97132656 0.23774926 0.47549852]]\n",
"\n",
" [[ 0.99680043 0.07993065 0.15986129]\n",
" [ 0.99500217 0.09985332 0.19970664]\n",
" [ 0.99280576 0.11973604 0.23947208]\n",
" [ 0.99021209 0.13957085 0.27914169]\n",
" [ 0.98722218 0.1593498 0.31869961]\n",
" [ 0.98383725 0.179065 0.35813 ]\n",
" [ 0.98005863 0.19870854 0.39741708]\n",
" [ 0.97588784 0.21827257 0.43654514]\n",
" [ 0.97132656 0.23774926 0.47549852]\n",
" [ 0.96637661 0.25713081 0.51426163]]]\n",
" . . . . . . . . . .\n",
"Output Training Data : \n",
"[[ 0.97588784 0.21827257 0.43654514]\n",
" [ 0.97132656 0.23774926 0.47549852]\n",
" [ 0.96637661 0.25713081 0.51426163]\n",
" [ 0.96103996 0.27640948 0.55281896]]\n",
" . . . . . . . . . .\n"
]
},
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x12cb64950>]"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nQaFQKBSl+H/BA8Z0MkhOLQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x12da2a450>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"print 'Print Training Data & Plot'\n",
"print 'Input Training Data : '\n",
"print ' cos(x) sin(x) cos(sin(x)) '\n",
"print X['train'][1:5]\n",
"print ' . . . . . . . . . .'\n",
"print 'Output Training Data : '\n",
"print y['train'][1:5]\n",
"print ' . . . . . . . . . .'\n",
"\n",
"plt.plot(predicted[1:1000, 1], label=\"a\", color=\"black\")\n",
"plt.plot(predicted[1:1000, 2], label=\"b\", color=\"blue\")\n",
"plt.plot(predicted[1:1000, 0], label=\"c\", color=\"red\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "tensorflow",
"language": "python",
"name": "tensorflow"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.12"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment