使用 tf.newaxis 进行不规则张量切片不起作用 tf.expand_dims 确实如此

问题描述

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

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

对此有解释吗?另外,我更愿意使用切片语法,因为它更具可读性——如果 expand_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,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,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,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,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",),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')>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)