이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

tf.random.set_seed

GitHub에서 소스보기

전역 랜덤 시드를 설정합니다.

노트북에 사용

튜토리얼에서 사용

랜덤 시드에 의존하는 오퍼레이션은 실제로 글로벌 및 오퍼레이션 레벨 시드의 두 시드에서 파생됩니다. 이것은 글로벌 시드를 설정합니다.

운영 수준 시드와의 상호 작용은 다음과 같습니다.

  1. 전역 시드와 작업 시드가 모두 설정되지 않은 경우 :이 작업에 무작위로 선택된 시드가 사용됩니다.
  2. 그래프 수준 시드가 설정되었지만 작업 시드가 설정되지 않은 경우 : 시스템은 고유 한 임의 시퀀스를 얻도록 그래프 수준 시드와 함께 작업 시드를 결정적으로 선택합니다. 동일한 버전의 tensorflow 및 사용자 코드 내에서이 순서는 결정적입니다. 그러나 다른 버전에서이 순서는 변경 될 수 있습니다. 코드가 작동 할 특정 시드에 의존하는 경우 그래프 수준 및 작업 수준 시드를 명시 적으로 지정하십시오.
  3. 오퍼레이션 시드가 설정되어 있지만 글로벌 시드가 설정되지 않은 경우 : 기본 글로벌 시드 및 지정된 오퍼레이션 시드를 사용하여 임의 순서를 결정합니다.
  4. 전역 및 작업 시드가 모두 설정된 경우 : 두 시드를 함께 사용하여 임의 순서를 결정합니다.

사용자가 볼 수있는 효과를 설명하려면 다음 예를 고려하십시오.

전역 시드 나 작업 시드가 설정되지 않은 경우 임의 op에 대한 모든 호출과 프로그램의 모든 다시 실행에 대해 다른 결과를 얻습니다.

 print(tf.random.uniform([1]))  # generates 'A1'
print(tf.random.uniform([1]))  # generates 'A2'
 

(이제 프로그램을 닫고 다시 실행하십시오)

 print(tf.random.uniform([1]))  # generates 'A3'
print(tf.random.uniform([1]))  # generates 'A4'
 

전역 시드가 설정되었지만 작업 시드가 설정되지 않은 경우 임의 op에 대한 모든 호출에 대해 다른 결과를 얻지 만 프로그램을 다시 실행할 때마다 동일한 순서를 갖습니다.

 tf.random.set_seed(1234)
print(tf.random.uniform([1]))  # generates 'A1'
print(tf.random.uniform([1]))  # generates 'A2'
 

(이제 프로그램을 닫고 다시 실행하십시오)

 tf.random.set_seed(1234)
print(tf.random.uniform([1]))  # generates 'A1'
print(tf.random.uniform([1]))  # generates 'A2'
 

위의 tf.random.uniform 의 두 번째 호출에서 'A1'대신 'A2'를 얻는 이유는 두 번째 호출이 다른 연산 시드를 사용하기 때문입니다.

이 경우 tf.function 은 프로그램을 다시 실행하는 것과 같은 역할을합니다. 전역 시드가 설정되었지만 작업 시드가 설정되지 않은 경우 난수 시퀀스는 각 tf.function 에서 동일합니다. 예를 들면 :

 tf.random.set_seed(1234)

@tf.function
def f():
  a = tf.random.uniform([1])
  b = tf.random.uniform([1])
  return a, b

@tf.function
def g():
  a = tf.random.uniform([1])
  b = tf.random.uniform([1])
  return a, b

print(f())  # prints '(A1, A2)'
print(g())  # prints '(A1, A2)'
 

연산 시드가 설정되면 임의 연산에 대한 모든 호출에 대해 다른 결과를 얻지 만 프로그램을 다시 실행할 때마다 동일한 순서를 얻습니다.

 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 'A1'
print(tf.random.uniform([1], seed=1))  # generates 'A2'
 

위의 tf.random.uniform 의 두 번째 호출에서 'A1'대신 'A2'를 얻는 이유는 동일한 인수를 가진 모든 호출에 대해 동일한 tf.random.uniform 커널 (예 : 내부 표현)이 TensorFlow에서 사용되기 때문입니다. , 커널은 실행될 때마다 증가하는 내부 카운터를 유지하여 다른 결과를 생성합니다.

tf.random.set_seed 를 호출하면 이러한 카운터가 재설정됩니다.

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

여러 개의 동일한 임의 작업이 tf.function 래핑되면 작업이 더 이상 동일한 카운터를 공유하지 않기 때문에 동작이 변경됩니다. 예를 들면 :

 @tf.function
def foo():
  a = tf.random.uniform([1], seed=1)
  b = tf.random.uniform([1], seed=1)
  return a, b
print(foo())  # prints '(A1, A1)'
print(foo())  # prints '(A2, A2)'

@tf.function
def bar():
  a = tf.random.uniform([1])
  b = tf.random.uniform([1])
  return a, b
print(bar())  # prints '(A1, A2)'
print(bar())  # prints '(A3, A4)'
 

tf.random.uniform 은 내부 카운터를 유지하므로 foo 의 두 번째 호출은 '(A1, A1)'대신 '(A2, A2)'를 반환합니다. foo 가 매번 '(A1, A1)'을 반환하도록하려면 tf.random.stateless_uniform 과 같은 상태 비 저장 임의 연산을 사용하십시오. 외부 변수를 사용하여 상태를 관리하는 새로운 상태 저장 랜덤 연산 세트에 대해서는 tf.random.experimental.Generator 도 참조하십시오.

seed 정수.