1

我有一个参差不齐的张量seq(num_sentences、num_words、word_dim)。如果我想在末尾添加一个新轴(维度) slice seq[..., tf.newaxis],它会失败并出现以下错误。

tf.expand_dims(seq, -1)但是有效。

对此有解释吗?另外,我宁愿使用切片语法,因为它更具可读性——如果第一个 arg ofexpand_dims更复杂——你必须axis在最后的某个地方写参数(其他轴参数通常会累积......)。

 File "main.py", line 159, in __init__
    seq = seq[..., tf.newaxis]
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/util/dispatch.py", line 205, in wrapper
    result = dispatch(wrapper, args, kwargs)
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/util/dispatch.py", line 118, in dispatch
    result = dispatcher.handle(args, kwargs)
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/keras/layers/core.py", line 1538, in handle
    return SlicingOpLambda(self.op)(*args, **kwargs)
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py", line 951, in __call__
    return self._functional_construction_call(inputs, args, kwargs,
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py", line 1090, in _functional_construction_call
    outputs = self._keras_tensor_symbolic_call(
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py", line 822, in _keras_tensor_symbolic_call
    return self._infer_output_signature(inputs, args, kwargs, input_masks)
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py", line 863, in _infer_output_signature
    outputs = call_fn(inputs, *args, **kwargs)
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/keras/layers/core.py", line 1521, in _call_wrapper
    return original_call(*new_args, **new_kwargs)
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/keras/layers/core.py", line 1327, in _call_wrapper
    return self._call_wrapper(*args, **kwargs)
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/keras/layers/core.py", line 1359, in _call_wrapper
    result = self.function(*args, **kwargs)
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/util/dispatch.py", line 201, in wrapper
    return target(*args, **kwargs)
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/ops/array_ops.py", line 963, in _slice_helper
    tensor = ops.convert_to_tensor(tensor)
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/profiler/trace.py", line 163, in wrapped
    return func(*args, **kwargs)
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/framework/ops.py", line 1540, in convert_to_tensor
    ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/framework/constant_op.py", line 339, in _constant_tensor_conversion_function
    return constant(v, dtype=dtype, name=name)
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/framework/constant_op.py", line 264, in constant
    return _constant_impl(value, dtype, shape, name, verify_shape=False,
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/framework/constant_op.py", line 281, in _constant_impl
    tensor_util.make_tensor_proto(
  File "/home/adam/.local/lib/python3.8/site-packages/tensorflow/python/framework/tensor_util.py", line 551, in make_tensor_proto
    raise TypeError("Failed to convert object of type %s to Tensor. "
TypeError: Failed to convert object of type <class 'tensorflow.python.ops.ragged.ragged_tensor.RaggedTensor'> to Tensor. Contents: tf.RaggedTensor(values=Tensor("Placeholder:0", shape=(None, 64), dtype=float32), row_splits=Tensor("Placeholder_1:0", shape=(None,), dtype=int64)). Consider casting elements to a supported type.

编辑:复制错误:

inputs = tf.keras.layers.Input([None, 10], dtype=tf.float32, ragged=True)
inputs[..., tf.newaxis]
Out: # I get the error above

tf.expand_dims(inputs, -1)
Out: <KerasTensor: type_spec=RaggedTensorSpec(TensorShape([None, None, 10, 1]), tf.float32, 1, tf.int64) (created by layer 'tf.expand_dims')>
4

0 回答 0