A problem with datatypes
vabor112 opened this issue · comments
Viacheslav Borovitskiy commented
I try to run the following simple code
# Import a backend
import tensorflow
# Import the corresponding geometric_kernels backend
import geometric_kernels.tensorflow
# Import a space and an appropriate kernel
from geometric_kernels.spaces.hypersphere import Hypersphere
from geometric_kernels.kernels.geometric_kernels import MaternKarhunenLoeveKernel
# Create a manifold (2-dim sphere)
hypersphere = Hypersphere(dim=2)
# Generate 3 random points on the sphere
xs = hypersphere.random_point(3)
# Initialize kernel, use 100 terms to approximate the infinite series.
kernel = MaternKarhunenLoeveKernel(hypersphere, 100)
params, state = kernel.init_params_and_state()
params["nu"] = tf.convert_to_tensor(5/2)
params["lengthscale"] = tf.convert_to_tensor(1.)
# Compute and print out the 3x3 kernel matrix.
print(kernel.K(params, state, tf.convert_to_tensor(xs)))
And get InvalidArgumentError: cannot compute AddV2 as input #1(zero-based) was expected to be a float tensor but is a double tensor [Op:AddV2]
.
Here is the full traceback:
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
<ipython-input-12-4a21cbf866ec> in <module>
20
21 # Compute and print out the 3x3 kernel matrix.
---> 22 print(kernel.K(params, state, tf.convert_to_tensor(xs)))
~/.local/lib/python3.8/site-packages/geometric_kernels/kernels/geometric_kernels.py in K(self, params, state, X, X2, **kwargs)
119 assert "eigenvalues_laplacian" in state
120
--> 121 weights = self.eigenvalues(params, state) # [M, 1]
122 Phi = state["eigenfunctions"]
123
~/.local/lib/python3.8/site-packages/geometric_kernels/kernels/geometric_kernels.py in eigenvalues(self, params, state)
106
107 eigenvalues_laplacian = state["eigenvalues_laplacian"] # [M, 1]
--> 108 return self._spectrum(
109 eigenvalues_laplacian ** 0.5,
110 nu=params["nu"],
~/.local/lib/python3.8/site-packages/geometric_kernels/kernels/geometric_kernels.py in _spectrum(self, s, nu, lengthscale)
82 elif nu > 0:
83 power = -nu - self.space.dimension / 2.0
---> 84 base = 2.0 * nu / lengthscale ** 2 + from_numpy(nu, s ** 2)
85 return base ** power
86 else:
~/.local/lib/python3.8/site-packages/tensorflow/python/util/traceback_utils.py in error_handler(*args, **kwargs)
151 except Exception as e:
152 filtered_tb = _process_traceback_frames(e.__traceback__)
--> 153 raise e.with_traceback(filtered_tb) from None
154 finally:
155 del filtered_tb
~/.local/lib/python3.8/site-packages/tensorflow/python/framework/ops.py in raise_from_not_ok_status(e, name)
7184 def raise_from_not_ok_status(e, name):
7185 e.message += (" name: " + name if name is not None else "")
-> 7186 raise core._status_to_exception(e) from None # pylint: disable=protected-access
7187
7188
InvalidArgumentError: cannot compute AddV2 as input #1(zero-based) was expected to be a float tensor but is a double tensor [Op:AddV2]
stoprightthere commented
Thanks for the issue! I close it as fixed with PR #35.