首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >被信号11干扰: SIGSEGV

被信号11干扰: SIGSEGV
EN

Stack Overflow用户
提问于 2019-09-13 07:59:32
回答 1查看 608关注 0票数 0

我所知道的是,当这个分支被执行并且它的weights被传递到tf.data.experimental.sample_from_datasets时,就会发生错误。

代码语言:javascript
复制
# ...
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)

以下工作:

代码语言:javascript
复制
weights = tf.cond(
    tf.greater(global_step, max_pretrain_steps),
    true_fn=lambda: const_task_weights,
    false_fn=lambda: pretrain_task_weights
)

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

代码语言:javascript
复制
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

我不太明白问题是什么,但问题肯定来自于这一行:

代码语言:javascript
复制
weights = a * const_task_weights + b * pretrain_task_weights

问题是为什么。在此上下文中对global_step具有依赖关系可能是无效的,因为weights参数是sample_from_datasets的。

然而,在sample_from_datasets中,我没有看到任何可疑的东西,因为在sample_from_datasets内部发生的第一件事是

代码语言:javascript
复制
weights = ops.convert_to_tensor(weights, name="weights")

所以把张量传递给它应该是好的。

有什么想法吗?

错误输出:

代码语言:javascript
复制
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 0 into /data/translation/multi-problem/hi2en/model/512-3-1-1024/de2en.hi2en/c19cfad259cad911/model.ckpt.
bash: line 1:  4153 Segmentation fault      (core dumped) env "CUDA_VISIBLE_DEVICES"="0" "LIBRARY_ROOTS"="/Users/username/Library/Caches/PyCharm2018.2/remote_sou...

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
EN

回答 1

Stack Overflow用户

发布于 2019-09-13 12:34:16

好的,问题是不是直接使用tensorflow -实际上一点也不。

问题在于const_task_weightspretrain_task_weights没有相同的形状。我没有验证输入,而是在其他地方有一个bug。

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

我想这不能由tensorflow检查或确定,所以这将是用户必须处理的事情(引用需要)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57919530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档