python - tf.signal.overlap_and_add 抛出 Attempting to capture an EagerTensor without build a function
问题描述
当我运行以下代码段时:
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
a@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
解决方案
我在这里并没有真正回答关于 tf.signal.overlap_and_add 的问题,但是 ConvTasnet 的重叠添加可以使用一个内核的转置卷积来实现,内核大小为 16,步幅为 8。它可能会更有效出色地。
推荐阅读
- java - 加载更多 Instagram 评论和点赞
- java - 以下程序的输出给我,它只是没有点击。答案是 6 3,我显然不明白
- python - 为什么我要在 Django 中连接库路径?
- c# - Azure 存储队列中的“Execution Timeout Expired”消息 - 过去几天没有将数据库记录推送到搜索索引
- python - Python更改套接字窗口标题
- python - 在报告 Python 版本的复杂 Bash 表达式中使用“egrep”进行过滤
- html - html中间文本对齐
- python-3.x - 使用调度库调度异步函数。(使用 discord.py 重写)
- java - 完成配置我的所有活动元素吗?
- hotlinking - 爬虫可以屏蔽盗链保护吗?