Can I run SGHMC with float64?


I am trying to run SGHMC with float64 as in the code below, but there is an error in the step Incompatible type conversion requested to type ‘float64’ for variabl
e of type ‘float32_ref’.

The code can run with KLqp() method. Then how can I run SGHMC with float64?
Further is it possible to set float64 as the default float type in Edward and tensorflow?

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import edward as ed
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import tensorflow as tf

from edward.models import Normal, Empirical
import time

def build_toy_dataset(N, noise_std=0.5):
  X = np.concatenate([np.linspace(0, 2, num=N / 2),
                      np.linspace(6, 8, num=N / 2)])
  y = 2.0 * X +3.+ 2. * np.random.normal(0, noise_std, size=N)
  X = X.reshape((N, 1))
  return np.float64(X), np.float64(y)

#from utils import ConfigureTFGPU
#with True:
#with tf.device('/gpu:0'):


N = 40  # number of data points
D = 1  # number of features

X_train, y_train = build_toy_dataset(N)
X_test, y_test = build_toy_dataset(N)

X = tf.placeholder(tf.float64, [N, D])
w = Normal(loc=tf.zeros(D,tf.float64), scale=tf.ones(D,tf.float64))
b = Normal(loc=tf.zeros(1,tf.float64), scale=tf.ones(1,tf.float64))
y = Normal(, w) + b, scale=tf.ones(1,tf.float64))
#y = tf.Variable(, w) + b)

T = 1000                        # Number of samples.
nburn = 100                     # Number of burn-in samples.
stride = 10                    # Frequency with which to plot samples.

qw = Empirical(params=tf.Variable(tf.truncated_normal([T, D],dtype=tf.float64),dtype=tf.float64))
qb = Empirical(params=tf.Variable(tf.truncated_normal([T, 1],dtype=tf.float64),dtype=tf.float64))
inference = ed.SGHMC({w: qw, b: qb}, data={X: X_train, y: y_train}),n_iter=10,logdir='E:\\PythonCode\\TestEdward\\mylog')

qw = Normal(loc=tf.Variable(tf.truncated_normal([D],dtype=tf.float64)),
qb = Normal(loc=tf.Variable(tf.truncated_normal([1],dtype=tf.float64)),
inference = ed.KLqp({w: qw, b: qb}, data={X: X_train, y: y_train}), n_iter=1000)



Thanks for spotting this. ed.HMC, ed.SGHMC, and ed.SGLD are currently limited to float32. I added a fix to this here (