I am new to Edward and relatively new to TensorFlow. I try to build a Bayesian RNN to predict remaining useful life on NASA’s CMAPSS dataset.
I started from the RNN example: Edward RNN and tried to get it running.
import edward as ed
import numpy as np
import pandas as pd
import tensorflow as tf
from edward.models import Normal
from edward.util import Progbar
x_train = np.load(“/CMAPSSData/train_norm_sub.npy”)
y_rul = np.load(“/CMAPSSData/train_norm_rul.npy”)
H = 50 # number of hidden units
D = 24 # number of features
def rnn_cell(hprev, xt):
return tf.tanh(ed.dot(hprev, W_h) + ed.dot(xt, W_x) + b_h)W_h = Normal(loc=tf.zeros([H, H]), scale=tf.ones([H, H]))
W_x = Normal(loc=tf.zeros([D, H]), scale=tf.ones([D, H]))
W_y = Normal(loc=tf.zeros([H, 1]), scale=tf.ones([H, 1]))
b_h = Normal(loc=tf.zeros(H), scale=tf.ones(H))
b_y = Normal(loc=tf.zeros(1), scale=tf.ones(1))
x = tf.placeholder(tf.float32, [None, D],name=‘x’)
h = tf.scan(rnn_cell, x, initializer=tf.zeros(H))
y = Normal(loc=tf.matmul(h, W_y) + b_y, scale=1.0,name=‘y’)
qW_h = Normal(loc=tf.get_variable(“qW_h/loc”, [H, H]),
scale=tf.nn.softplus(tf.get_variable(“qW_h/scale”, [H, H])))
qW_x = Normal(loc=tf.get_variable(“qW_x/loc”, [D, H]),
scale=tf.nn.softplus(tf.get_variable(“qW_x/scale”, [D, H])))
qW_y = Normal(loc=tf.get_variable(“qW_y/loc”, [H, 1]),
scale=tf.nn.softplus(tf.get_variable(“qW_y/scale”, [H, 1])))
qb_h = Normal(loc=tf.get_variable(“qb_h/loc”, [H]),
scale=tf.nn.softplus(tf.get_variable(“qb_h/scale”, [H])))
qb_y = Normal(loc=tf.get_variable(“qb_y/loc”, [1]),
scale=tf.nn.softplus(tf.get_variable(“qb_y/scale”, [1])))
inference = ed.KLqp({W_h: qW_h, b_h: qb_h,
W_x: qW_x,
W_y: qW_y, b_y: qb_y},
data={x:x_train, y: y_rul})
optimizer = tf.train.AdamOptimizer(learning_rate=0.0001)
inference.run(optimizer=optimizer)
I am facing the error:
InvalidArgumentError: : Tensor had NaN values
[[Node: inference_15/sample_47/scan/while/VerifyFinite_3/CheckNumerics = CheckNumerics[T=DT_FLOAT, _class=[“loc:@Normal_1/sample/Reshape”], message=“”, _device=“/job:localhost/replica:0/task:0/device:CPU:0”](inference_15/sample_47/scan/while/VerifyFinite_3/CheckNumerics/Enter, ^inference_15/sample_47/scan/while/Identity)]]
I have already tried different learning rates and used the most recent Git version of Edward.
I already checked the dataframe by using:
x_train_df = pd.DataFrame(x_train)
output:
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 0
11 0
12 0
13 0
14 0
15 0
16 0
17 0
18 0
19 0
20 0
21 0
22 0
23 0
dtype: int64
y_rul_df = pd.DataFrame(y_rul)
output:
0 0
dtype: int64