tf.signal.overlap_和_add抛出试图在不构建函数的情况下捕获张量

2024-04-26 13:40:31 发布

您现在位置:Python中文网/ 问答频道 /正文

当我运行以下代码段时:

import tensorflow as tf
from tensorflow.keras import Input, layers

segments = 1
segment_length = 64000
inputs = Input(shape=(segments, segment_length))
net = tf.reshape(inputs, (-1, 1, segment_length * segments))
net = layers.Conv1D(filters=512, kernel_size=16, strides=8, use_bias=False, padding='same', data_format='channels_first')(net)
net = tf.reshape(net, (-1,2, 512, 8000))
net = tf.transpose(net, perm=[0,1,3,2])
net = layers.Dense(16, input_shape=(512,), use_bias=False)(net)
out = tf.signal.overlap_and_add(net, 8)

我得到以下异常:

Traceback (most recent call last):
  File "model/test.py", line 12, in <module>
    out = tf.signal.overlap_and_add(net, 8)
  File "/home/mmoran/.miniconda3/envs/convtasnet/lib/python3.6/site-packages/tensorflow/python/ops/signal/reconstruction_ops.py", line 116, in overlap_and_add
    paddings = array_ops.concat([outer_paddings, paddings], 0)
  File "/home/mmoran/.miniconda3/envs/convtasnet/lib/python3.6/site-packages/tensorflow/python/util/dispatch.py", line 180, in wrapper
    return target(*args, **kwargs)
  File "/home/mmoran/.miniconda3/envs/convtasnet/lib/python3.6/site-packages/tensorflow/python/ops/array_ops.py", line 1598, in concat
    return gen_array_ops.concat_v2(values=values, axis=axis, name=name)
  File "/home/mmoran/.miniconda3/envs/convtasnet/lib/python3.6/site-packages/tensorflow/python/ops/gen_array_ops.py", line 1189, in concat_v2
    "ConcatV2", values=values, axis=axis, name=name)
  File "/home/mmoran/.miniconda3/envs/convtasnet/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 414, in _apply_op_helper
    as_ref=input_arg.is_ref)
  File "/home/mmoran/.miniconda3/envs/convtasnet/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 1409, in internal_convert_n_to_tensor
    ctx=ctx))
  File "/home/mmoran/.miniconda3/envs/convtasnet/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 1307, in convert_to_tensor
    raise RuntimeError("Attempting to capture an EagerTensor without "
RuntimeError: Attempting to capture an EagerTensor without building a function.

我已经尝试将tf.signal.overlap_and_add包装在@tf.function中,但得到了相同的结果。除此之外,我还尝试禁用渴望模式,但当我禁用时,tf.signal.overlap_and_add的结果是(None, 2, None)破坏了我的自定义丢失函数,该函数使用形状创建遮罩。 我做错了什么?是虫子吗

我的系统设置是:

Ubuntu 19.10
tf-nightly==2.2.0.dev20200218
tf-nightly-gpu==2.2.0.dev20200218

Tags: inpyhomenetlibtftensorflowline
1条回答
网友
1楼 · 发布于 2024-04-26 13:40:31

我并不是真的在这里回答关于tf.signal.overlap_和_add的问题,但是ConvTasnet的overlap add可以使用转置卷积实现,一个内核,一个内核大小为16,一个步长为8。而且它可能也会更有效率

相关问题 更多 >