tensorflow 如何在Kaggle内核的后续单元格中消除全局/操作级种子的影响?

g6ll5ycj  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(109)

上下文

我正在尝试写一个Kaggle内核,主题涉及设置全局/操作级种子。为此,我在不同的单元格中分别编写每个案例。但我遇到的问题是,我在之前的单元格中设置的种子会影响后续单元格的输出。
例如,看看下面描述其中一种情况的代码片段:

"""
Case:
    Setup: When only operation level seed is set -
           - Since operation level seed is set, the sequence will start from same number after restarts, 
            and sequence will be same

"""

import tensorflow as tf

print(tf.random.uniform([1], seed=1))  # generates 'A1'
print(tf.random.uniform([1], seed=1))  # generates 'A2'
print(tf.random.uniform([1], seed=1))  # generates 'A3'
print(tf.random.uniform([1], seed=1))  # generates 'A4'

如果我重新运行上面的代码(作为单独的python文件的一部分),我会得到相同的序列(如预期的那样)。
但是当我在Kaggle内核的单独单元格中重新运行相同的代码时,我得到了不同的序列。这可能是由于我必须在以前的单元格中设置全局/操作级种子。
“我试过什么?**
为了消除前面的单元格对当前单元格的影响,我使用了一些已经可用的技术来重新启动内核:

import IPython.display as display
import time

# Restart the cell
display.Javascript('Jupyter.notebook.kernel.restart()')

# Wait for the kernel to restart
time.sleep(20)

"""
Case:
    Setup: When only operation level seed is set -
           - Since operation level seed is set, the sequence will start from same number after restarts, 
            and sequence will be same

"""

import tensorflow as tf

print(tf.random.uniform([1], seed=1))  # generates 'A1'
print(tf.random.uniform([1], seed=1))  # generates 'A2'
print(tf.random.uniform([1], seed=1))  # generates 'A3'
print(tf.random.uniform([1], seed=1))  # generates 'A4'

或者这个:

from IPython.core.display import HTML
HTML("<script>Jupyter.notebook.kernel.restart()</script>")

"""
Case:
    Setup: When only operation level seed is set -
           - Since operation level seed is set, the sequence will start from same number after restarts, 
            and sequence will be same

"""

import tensorflow as tf

print(tf.random.uniform([1], seed=1))  # generates 'A1'
print(tf.random.uniform([1], seed=1))  # generates 'A2'
print(tf.random.uniform([1], seed=1))  # generates 'A3'
print(tf.random.uniform([1], seed=1))  # generates 'A4'

但我仍然没有得到相同的序列。

我的问题

我还应该尝试什么,还是我做错了什么?

unguejic

unguejic1#

我在Stack Overflow和Kaggle评论中尝试了一些关于使用javascript重新启动Kaggle内核的答案,但它们不适用于我的用例。
因此,我将我的代码片段上传到一个python文件中,并将此文件作为数据集上传,并使用以下命令在内核的单元格中独立运行python文件:

!python /kaggle/input/tensorflow-global-and-operation-level-seeds/random_seed_case_5.py

上述示例可在-https://www.kaggle.com/code/adeepak7/tensorflow-s-global-and-operation-level-seeds中找到
这是一种黑客,但我鼓励人们分享他们的方法/技巧。

相关问题