被信号11中断:SIGSEGV

时间:2019-09-13 07:59:32

标签: tensorflow

我所知道的是,执行此分支并将分支中的weights传递到tf.data.experimental.sample_from_datasets时会发生错误:

# ...
elif pretrain_cfg.schedule == PretrainSchedule.CONVERGE_LINEARLY:
    logger.info('[%s] - Pretrain: Using CONVERGE_LINEARLY schedule' % self.name)
    a = tf.minimum(tf.constant(1.0, dtype=tf.float64, shape=(1,)), global_step / max_pretrain_steps)
    b = tf.maximum(tf.constant(0.0, dtype=tf.float64, shape=(1,)), 1 - global_step / max_pretrain_steps)
    weights = a * const_task_weights + b * pretrain_task_weights

return tf.data.experimental.sample_from_datasets(datasets, weights=weights)

以下作品:

weights = tf.cond(
    tf.greater(global_step, max_pretrain_steps),
    true_fn=lambda: const_task_weights,
    false_fn=lambda: pretrain_task_weights
)

但是由于某种原因,这会导致SIGSEGV

a = tf.minimum(tf.constant(1.0, dtype=tf.float64, shape=(1,)), global_step / max_pretrain_steps)
b = tf.maximum(tf.constant(0.0, dtype=tf.float64, shape=(1,)), 1 - global_step / max_pretrain_steps)
weights = a * const_task_weights + b * pretrain_task_weights

我真的不知道问题出在哪里,但是问题肯定来自此行:

weights = a * const_task_weights + b * pretrain_task_weights

问题是为什么。从global_step的{​​{1}}参数开始,在这种情况下依赖weights可能是无效的。

但是,在sample_from_datasets中,我看不到任何可疑之处,因为在sample_from_datasets内部发生的第一件事是

sample_from_datasets

因此将张量传​​递给它应该很好。

有什么想法吗?


错误输出:

weights = ops.convert_to_tensor(weights, name="weights")

1 个答案:

答案 0 :(得分:1)

好吧,事实证明,问题不是直接与张量流有关的不是-实际上根本没有。

问题是因为const_task_weightspretrain_task_weights的形状不同。我没有验证输入内容,而在其他地方有一个错误。

请注意,如果形状不匹配,您可能会遇到这种错误。

我想这无法通过tensorflow进行检查或确定,因此这是用户必须注意的事情(需要引用)。