我是否编写了自定义代码?否
操作系统平台与分发?Win10
从管道安装TensorFlow
TensorFlow版本?1.7
Bazel版本?不适用
CUDA/cuDNN版本?不适用
GPU型号和内存?不适用
要重现的确切命令:未排序段总和
描述问题
假设您有3个包含12个值的序列(shape(3,12))和5个段,并且输入的shape(None,12,3)转置为(3,12,None)
使用任何带有unsorted_segement_x的函数,输出都将是(5,None)。
有没有可能有一个函数做同样的事情,但仍然保持第一维度。
相当于:
input.shape==(None,12,3)
segment.shape==(3,12)
outputs=[]
for ix, val in enumerate(tf.unstack(input)):
ouputs.append(tf.unsorted_segment_sum(val,sequence[ix],5)
output=tf.stack(outputs)
output.shape==(3,5,None)
这种方法的用途是迭代加权输入,而不必循环数据或使用整形。不将上级维度的所有序列连接在一起,并使用类似于reduce_sum的“keep_dims”来触发该行为。
7条答案
按热度按时间ogq8wdun1#
感谢您的发帖。我们注意到您尚未填写问题模板中的以下字段。如果这些字段与您的案例相关,您是否可以更新它们,或者将它们保留为N/A?谢谢。
我是否编写了自定义代码
操作系统平台和分发
TensorFlow安装自
TensorFlow版本
Bazel版本
CUDA/cuDNN版本
GPU型号和内存
要重现的确切命令
h5qlskok2#
我是否编写了自定义代码?否
操作系统平台与分发?Win10
从管道安装TensorFlow
TensorFlow版本?1.7
Bazel版本?不适用
CUDA/cuDNN版本?不适用
GPU型号和内存?不适用
要重现的确切命令:未排序段总和
(bot的重复信息)
fcipmucu3#
我也想使用相同的功能!奇怪的是segment_ops没有keep_dims参数。
krugob8w4#
@zhaoxin19有一些解决方法,一个好主意是开始一个新的线程,因为@rmlarsen似乎已经死亡。如果你在赶时间,需要一些解决方法,我可以帮助。
rqmkfv5c5#
@皇家0045,非常感谢你的帮助。我正在做深入的模型研究,想在我的新模型中添加这种操作。很明显,我已经找到了unsorted_segment_sum的实现。但是它和我想要的有点不同。我认为在这个操作中添加一个keep_dims参数是一个好主意。我不擅长在tensorflow 中添加或更改新操作。如果有人能帮忙,我将非常感激。
c3frrgcw6#
@roya0045你知道我们如何在tensorflow中添加这个特性吗?看起来我们只需要将tf.unsorted_segment_sum api改为tf.reduce_sum,添加一个keep_dims参数。
iklwldmw7#
我确信这是可以做到的,但我不确定怎么做。我不熟悉c++和tensorflow 的代码库。
到目前为止,我找到的解决方法已在我的最新项目中实现
唯一的问题是,我还没有测试这4种方法是否会破坏反向传播(先获得权重,在随机数据上训练,之后获得权重,然后减去初始权重,看看它是否有效。)
我想测试它们,但我没有太多时间这样做,如果你愿意,你可以为每个版本设置一个带有for循环的最小网络,训练它,并比较权重,看看这些变通办法是否有效,我对结果很感兴趣。