In [5]:
import tensorflow as tf
import matplotlib.pyplot as plt

from sklearn.pipeline import Pipeline
from sklearn import datasets, linear_model
from sklearn import cross_validation
import numpy as np
import pandas as pd
from sklearn import preprocessing

In [8]:
df = pd.read_excel("data0505.xlsx",header=0)
# clean up data
df = df.dropna(how = 'all')
df = df.fillna(0)
df = df.round(4)
df=df[df['Power']>=0]
df.head()


Out[8]:
SOC SOH Power T SEI_after SEI_delta
10 80 1.0 0.0526 23 0.0 44.8776
11 80 1.0 0.1579 23 0.0 46.1896
12 80 1.0 0.2632 23 0.0 47.5605
13 80 1.0 0.3684 23 0.0 48.9998
14 80 1.0 0.4737 23 0.0 50.4819

In [10]:
min_max_scaler = preprocessing.MinMaxScaler()
np_scaled = min_max_scaler.fit_transform(df)
df_normalized = pd.DataFrame(np_scaled)
df_normalized.head()


Out[10]:
0 1 2 3 4 5
0 1.0 0.0 0.000000 0.0 0.0 0.760108
1 1.0 0.0 0.111146 0.0 0.0 0.782330
2 1.0 0.0 0.222293 0.0 0.0 0.805549
3 1.0 0.0 0.333333 0.0 0.0 0.829927
4 1.0 0.0 0.444480 0.0 0.0 0.855030

In [11]:
x = np.array(df_normalized.ix[:,0:2])#first three column are SoC, SoH, power
y = np.array(df_normalized.ix[:,5])#delta SEI
X_train, X_test, Y_train, Y_test = cross_validation.train_test_split(
x, y, test_size=0.2, random_state=42)
total_len = X_train.shape[0]
total_len


Out[11]:
4880

In [12]:
# Parameters
learning_rate = 0.001
training_epochs = 50
batch_size = 100
display_step = 1
dropout_rate = 0.1
# Network Parameters
n_hidden_1 = 10 # 1st layer number of features
n_hidden_2 = 5 # 2nd layer number of features
n_input = X_train.shape[1]
n_classes = 1

# tf Graph input
x = tf.placeholder("float", [None, 3])
y = tf.placeholder("float", [None])

In [13]:
# Create model
def multilayer_perceptron(x, weights, biases):
    # Hidden layer with RELU activation
    layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
    layer_1 = tf.nn.relu(layer_1)

    # Hidden layer with RELU activation
    layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
    layer_2 = tf.nn.relu(layer_2)

    # Output layer with linear activation
    out_layer = tf.matmul(layer_2, weights['out']) + biases['out']
    return out_layer

In [14]:
# Store layers weight & bias
weights = {
    'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1], 0, 0.1)),
    'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2], 0, 0.1)),
    'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes], 0, 0.1))
}
biases = {
    'b1': tf.Variable(tf.random_normal([n_hidden_1], 0, 0.1)),
    'b2': tf.Variable(tf.random_normal([n_hidden_2], 0, 0.1)),
    'out': tf.Variable(tf.random_normal([n_classes], 0, 0.1))
}

In [15]:
# Construct model
pred = multilayer_perceptron(x, weights, biases)

In [16]:
# Define loss and optimizer
cost = tf.reduce_mean((tf.transpose(pred)-y)*(tf.transpose(pred)-y)) 
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

# Launch the graph
with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())
    tf.initialize_all_variables()

    # Training cycle
    for epoch in range(training_epochs):
        avg_cost = 0.
        total_batch = int(total_len/batch_size)
        # Loop over all batches
        for i in range(total_batch-1):
            batch_x = X_train[i*batch_size:(i+1)*batch_size]
            batch_y = Y_train[i*batch_size:(i+1)*batch_size]
            # Run optimization op (backprop) and cost op (to get loss value)
            _, c, p = sess.run([optimizer, cost, pred], feed_dict={x: batch_x,
                                                          y: batch_y})
            # Compute average loss
            avg_cost += c / total_batch

        # sample prediction
        label_value = batch_y
        estimate = p
        err = label_value-estimate
        print ("num batch:", total_batch)

        # Display logs per epoch step
        if epoch % display_step == 0:
            print ("Epoch:", '%04d' % (epoch+1), "cost=", \
                "{:.9f}".format(avg_cost))
            print ("[*]----------------------------")
            for i in range(3):
                print ("label value:", label_value[i], \
                    "estimated value:", estimate[i])
            print ("[*]============================")

    print ("Optimization Finished!")
    
    # Test model
    # correct_prediction = tf.equal(tf.argmax(pred,0), tf.argmax(y,0))
    # Calculate accuracy
    accuracy = tf.reduce_mean((tf.transpose(pred)-y)*(tf.transpose(pred)-y)) 
    print ("MSE:", accuracy.eval({x: X_test, y: Y_test}))


num batch: 48
Epoch: 0001 cost= 0.653324438
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.07771525]
label value: 0.788510037923 estimated value: [ 0.08068381]
label value: 0.75568544624 estimated value: [ 0.07602236]
[*]============================
num batch: 48
Epoch: 0002 cost= 0.424272126
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.35695586]
label value: 0.788510037923 estimated value: [ 0.36942384]
label value: 0.75568544624 estimated value: [ 0.32976228]
[*]============================
num batch: 48
Epoch: 0003 cost= 0.094070199
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.82547671]
label value: 0.788510037923 estimated value: [ 0.85426039]
label value: 0.75568544624 estimated value: [ 0.74013388]
[*]============================
num batch: 48
Epoch: 0004 cost= 0.010735776
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.88168484]
label value: 0.788510037923 estimated value: [ 0.90648782]
label value: 0.75568544624 estimated value: [ 0.78530633]
[*]============================
num batch: 48
Epoch: 0005 cost= 0.009506162
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.87628341]
label value: 0.788510037923 estimated value: [ 0.8940109]
label value: 0.75568544624 estimated value: [ 0.77669036]
[*]============================
num batch: 48
Epoch: 0006 cost= 0.008579969
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.87534475]
label value: 0.788510037923 estimated value: [ 0.88600343]
label value: 0.75568544624 estimated value: [ 0.77202308]
[*]============================
num batch: 48
Epoch: 0007 cost= 0.007678320
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.87415296]
label value: 0.788510037923 estimated value: [ 0.87772399]
label value: 0.75568544624 estimated value: [ 0.7673378]
[*]============================
num batch: 48
Epoch: 0008 cost= 0.006822387
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.87283683]
label value: 0.788510037923 estimated value: [ 0.86942708]
label value: 0.75568544624 estimated value: [ 0.762833]
[*]============================
num batch: 48
Epoch: 0009 cost= 0.006023696
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.87143499]
label value: 0.788510037923 estimated value: [ 0.86124712]
label value: 0.75568544624 estimated value: [ 0.75860649]
[*]============================
num batch: 48
Epoch: 0010 cost= 0.005289455
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.86995476]
label value: 0.788510037923 estimated value: [ 0.85326779]
label value: 0.75568544624 estimated value: [ 0.75471181]
[*]============================
num batch: 48
Epoch: 0011 cost= 0.004623550
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.86841047]
label value: 0.788510037923 estimated value: [ 0.84556603]
label value: 0.75568544624 estimated value: [ 0.75119466]
[*]============================
num batch: 48
Epoch: 0012 cost= 0.004027425
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.86681861]
label value: 0.788510037923 estimated value: [ 0.83820951]
label value: 0.75568544624 estimated value: [ 0.74808908]
[*]============================
num batch: 48
Epoch: 0013 cost= 0.003500679
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.8651973]
label value: 0.788510037923 estimated value: [ 0.83125806]
label value: 0.75568544624 estimated value: [ 0.74541897]
[*]============================
num batch: 48
Epoch: 0014 cost= 0.003041471
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.86356628]
label value: 0.788510037923 estimated value: [ 0.82476377]
label value: 0.75568544624 estimated value: [ 0.74319702]
[*]============================
num batch: 48
Epoch: 0015 cost= 0.002646791
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.86194569]
label value: 0.788510037923 estimated value: [ 0.81876957]
label value: 0.75568544624 estimated value: [ 0.74142402]
[*]============================
num batch: 48
Epoch: 0016 cost= 0.002312662
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.86035675]
label value: 0.788510037923 estimated value: [ 0.8133083]
label value: 0.75568544624 estimated value: [ 0.74008906]
[*]============================
num batch: 48
Epoch: 0017 cost= 0.002034322
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.85881937]
label value: 0.788510037923 estimated value: [ 0.80840063]
label value: 0.75568544624 estimated value: [ 0.73916835]
[*]============================
num batch: 48
Epoch: 0018 cost= 0.001806399
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.85735208]
label value: 0.788510037923 estimated value: [ 0.80405349]
label value: 0.75568544624 estimated value: [ 0.73862606]
[*]============================
num batch: 48
Epoch: 0019 cost= 0.001623118
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.85597086]
label value: 0.788510037923 estimated value: [ 0.80026001]
label value: 0.75568544624 estimated value: [ 0.73841643]
[*]============================
num batch: 48
Epoch: 0020 cost= 0.001478519
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.85468924]
label value: 0.788510037923 estimated value: [ 0.79699993]
label value: 0.75568544624 estimated value: [ 0.73848593]
[*]============================
num batch: 48
Epoch: 0021 cost= 0.001366686
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.85351658]
label value: 0.788510037923 estimated value: [ 0.79424119]
label value: 0.75568544624 estimated value: [ 0.73877704]
[*]============================
num batch: 48
Epoch: 0022 cost= 0.001281967
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.85245913]
label value: 0.788510037923 estimated value: [ 0.791942]
label value: 0.75568544624 estimated value: [ 0.73923159]
[*]============================
num batch: 48
Epoch: 0023 cost= 0.001219137
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.85151917]
label value: 0.788510037923 estimated value: [ 0.79005414]
label value: 0.75568544624 estimated value: [ 0.73979443]
[*]============================
num batch: 48
Epoch: 0024 cost= 0.001173541
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.85069513]
label value: 0.788510037923 estimated value: [ 0.78852606]
label value: 0.75568544624 estimated value: [ 0.74041605]
[*]============================
num batch: 48
Epoch: 0025 cost= 0.001141171
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84998292]
label value: 0.788510037923 estimated value: [ 0.78730583]
label value: 0.75568544624 estimated value: [ 0.74105489]
[*]============================
num batch: 48
Epoch: 0026 cost= 0.001118698
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84937578]
label value: 0.788510037923 estimated value: [ 0.78634346]
label value: 0.75568544624 estimated value: [ 0.74167836]
[*]============================
num batch: 48
Epoch: 0027 cost= 0.001103439
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84886533]
label value: 0.788510037923 estimated value: [ 0.78559321]
label value: 0.75568544624 estimated value: [ 0.74226278]
[*]============================
num batch: 48
Epoch: 0028 cost= 0.001093306
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84844136]
label value: 0.788510037923 estimated value: [ 0.78501344]
label value: 0.75568544624 estimated value: [ 0.74279213]
[*]============================
num batch: 48
Epoch: 0029 cost= 0.001086724
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84809309]
label value: 0.788510037923 estimated value: [ 0.78456849]
label value: 0.75568544624 estimated value: [ 0.74325788]
[*]============================
num batch: 48
Epoch: 0030 cost= 0.001082541
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84780991]
label value: 0.788510037923 estimated value: [ 0.78422821]
label value: 0.75568544624 estimated value: [ 0.74365687]
[*]============================
num batch: 48
Epoch: 0031 cost= 0.001079941
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84758151]
label value: 0.788510037923 estimated value: [ 0.78396845]
label value: 0.75568544624 estimated value: [ 0.74399078]
[*]============================
num batch: 48
Epoch: 0032 cost= 0.001078361
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.8473984]
label value: 0.788510037923 estimated value: [ 0.78376949]
label value: 0.75568544624 estimated value: [ 0.74426365]
[*]============================
num batch: 48
Epoch: 0033 cost= 0.001077425
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84725165]
label value: 0.788510037923 estimated value: [ 0.78361571]
label value: 0.75568544624 estimated value: [ 0.74448144]
[*]============================
num batch: 48
Epoch: 0034 cost= 0.001076886
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84713423]
label value: 0.788510037923 estimated value: [ 0.78349543]
label value: 0.75568544624 estimated value: [ 0.74465144]
[*]============================
num batch: 48
Epoch: 0035 cost= 0.001076587
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84703946]
label value: 0.788510037923 estimated value: [ 0.7833994]
label value: 0.75568544624 estimated value: [ 0.74478048]
[*]============================
num batch: 48
Epoch: 0036 cost= 0.001076433
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84696174]
label value: 0.788510037923 estimated value: [ 0.78332084]
label value: 0.75568544624 estimated value: [ 0.74487519]
[*]============================
num batch: 48
Epoch: 0037 cost= 0.001076363
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84689677]
label value: 0.788510037923 estimated value: [ 0.78325474]
label value: 0.75568544624 estimated value: [ 0.74494183]
[*]============================
num batch: 48
Epoch: 0038 cost= 0.001076343
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84684116]
label value: 0.788510037923 estimated value: [ 0.78319722]
label value: 0.75568544624 estimated value: [ 0.74498576]
[*]============================
num batch: 48
Epoch: 0039 cost= 0.001076352
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84679174]
label value: 0.788510037923 estimated value: [ 0.78314525]
label value: 0.75568544624 estimated value: [ 0.74501139]
[*]============================
num batch: 48
Epoch: 0040 cost= 0.001076379
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84674621]
label value: 0.788510037923 estimated value: [ 0.78309679]
label value: 0.75568544624 estimated value: [ 0.74502224]
[*]============================
num batch: 48
Epoch: 0041 cost= 0.001076418
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84670252]
label value: 0.788510037923 estimated value: [ 0.78305]
label value: 0.75568544624 estimated value: [ 0.74502128]
[*]============================
num batch: 48
Epoch: 0042 cost= 0.001076466
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84665966]
label value: 0.788510037923 estimated value: [ 0.78300381]
label value: 0.75568544624 estimated value: [ 0.74501073]
[*]============================
num batch: 48
Epoch: 0043 cost= 0.001076520
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84661597]
label value: 0.788510037923 estimated value: [ 0.7829569]
label value: 0.75568544624 estimated value: [ 0.74499238]
[*]============================
num batch: 48
Epoch: 0044 cost= 0.001076579
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84657085]
label value: 0.788510037923 estimated value: [ 0.78290868]
label value: 0.75568544624 estimated value: [ 0.74496722]
[*]============================
num batch: 48
Epoch: 0045 cost= 0.001076645
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84652346]
label value: 0.788510037923 estimated value: [ 0.78285843]
label value: 0.75568544624 estimated value: [ 0.74493659]
[*]============================
num batch: 48
Epoch: 0046 cost= 0.001076715
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84647334]
label value: 0.788510037923 estimated value: [ 0.78280574]
label value: 0.75568544624 estimated value: [ 0.74490082]
[*]============================
num batch: 48
Epoch: 0047 cost= 0.001076790
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84642005]
label value: 0.788510037923 estimated value: [ 0.78275025]
label value: 0.75568544624 estimated value: [ 0.74486059]
[*]============================
num batch: 48
Epoch: 0048 cost= 0.001076872
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84636319]
label value: 0.788510037923 estimated value: [ 0.78269166]
label value: 0.75568544624 estimated value: [ 0.74481606]
[*]============================
num batch: 48
Epoch: 0049 cost= 0.001076959
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.84630257]
label value: 0.788510037923 estimated value: [ 0.78262967]
label value: 0.75568544624 estimated value: [ 0.74476755]
[*]============================
num batch: 48
Epoch: 0050 cost= 0.001077051
[*]----------------------------
label value: 0.844460892497 estimated value: [ 0.8462379]
label value: 0.788510037923 estimated value: [ 0.78256404]
label value: 0.75568544624 estimated value: [ 0.74471509]
[*]============================
Optimization Finished!
MSE: 0.00165942

In [ ]: