Как создать тензор complex128 с помощью tf.range - PullRequest
1 голос
/ 26 мая 2020

Работают следующие строки:

t1 = tf.constant([-2.0, -1.0, 0, 1.0, 2.0], dtype=tf.complex128)
tf.sqrt(t1)
print(t1)

Теперь, если я использую

t1 = tf.range(-2.0, 3.0, 1, dtype=tf.complex128)
tf.sqrt(t1)
print(t1)

, я получаю обычную ошибку:

Node: {{node Диапазон}} Все ядра, зарегистрированные для операции Диапазон:
device = 'CPU'; Tidx в [DT_FLOAT] device = 'CPU'; Tidx в [DT_DOUBLE]
device = 'CPU'; Tidx в [DT_INT32] device = 'CPU'; Tidx в [DT_INT64]
device = 'GPU'; Tidx в [DT_FLOAT] device = 'GPU'; Tidx в [DT_DOUBLE]
device = 'GPU'; Tidx в [DT_INT32] device = 'GPU'; Tidx в [DT_INT64]
device = 'XLA_CPU_JIT'; Tidx в [DT_FLOAT, DT_DOUBLE, DT_INT32, DT_INT64, DT_BFLOAT16, DT_HALF] device = 'XLA_GPU_JIT'; Tidx в [DT_FLOAT, DT_DOUBLE, DT_INT32, DT_INT64, DT_BFLOAT16, DT_HALF]
device = 'XLA_CPU'; Tidx в [DT_FLOAT, DT_DOUBLE, DT_INT32, DT_INT64, DT_BFLOAT16, DT_HALF] device = 'XLA_GPU'; Tidx в [DT_FLOAT, DT_DOUBLE, DT_INT32, DT_INT64, DT_BFLOAT16, DT_HALF] [Op: Range]

Что я делаю не так?

1 Ответ

1 голос
/ 01 июня 2020

Согласно этой ошибке, он говорит, что вход в tf.range должен быть одним из double, float, int, зарегистрированных для op Range on device: CPU and GPU. Но ваш ввод - complex128, следовательно, он возвращает NotFoundError.

Если мы не указали никакого dtype (т.е. dtype is None), он выводит dtype из dtype_hierarchy: dtypes.int32, dtypes.int64, dtypes.float32, dtypes.float64 согласно как per arg.dtype.

Обходной путь для создания тензора complex128 с использованием tf.range приведен ниже с помощью tf.cast

t1 = tf.range(-2.0, 3.0, 1)
# casts tensor to a complex128 dtype.
t2 = tf.cast(t1, dtype=tf.complex128)
# apply sqrt function
tf.sqrt(t2)
# print output
print(t1)
print(t2)

Результат:

tf.Tensor([-2. -1.  0.  1.  2.], shape=(5,), dtype=float32)
tf.Tensor([-2.+0.j -1.+0.j  0.+0.j  1.+0.j  2.+0.j], shape=(5,), dtype=complex128)
...