튜토리얼은 따라 가겠는데... 전혀 감이 안잡힌다... 그래서 Get started 다음에 있는

프로그래머 가이드 부분에서부터 다시 시작하겠습니다.


Variables: Creation, Initialization, Saving, and Loading

변수 : 생성, 초기화, 저장 및로드

당신이 모델을 학습 할 때 보유 할 변수 및 업데이트 매개 변수를 사용합니다. 변수 텐서를 함유하는 버퍼 메모리에 있습니다.
명시 적으로 초기화해야하며 교육 도중 및 후에 디스크에 저장할 수 있습니다. 나중에 저장된 값을 복원하여 모델을 연습하거나 분석 할 수 있습니다.

이 문서는 다음 TensorFlow 클래스를 참조합니다. API에 대한 전체 설명은 참조 설명서 링크를 참조하십시오.

Creation (창조)

변수를 만들면 초기 값으로 Tensor를 Variable () 생성자에 전달합니다. TensorFlow는 상수 또는 임의 값에서 초기화에 자주 사용되는 텐서를 생성하는 연산 모음을 제공합니다.


이러한 모든 작업에는 텐서의 모양을 지정해야합니다. 그 모양은 자동으로 변수의 모양이됩니다.

변수는 일반적으로 고정 된 모양을 갖지만 TensorFlow는 변수를 변경하는 고급 메커니즘을 제공합니다.

# Create two variables.
weights
= tf.Variable(tf.random_normal([784, 200], stddev=0.35),
                      name
="weights")
biases
= tf.Variable(tf.zeros([200]), name="biases")

tf.Variable ()을 호출하면 그래프에 몇 가지 연산이 추가됩니다.

  • 변수 값을 보유하는 변수 op.
  • 변수를 초기 값으로 설정하는 이니셜 라이저 op. 이것은 실제로 tf.assign op입니다.
  • 예제의 biases 변수에 대한 0과 같은 초기 값에 대한 연산도 그래프에 추가됩니다.

tf.Variable () 값에 의해 반환되는 값은 Python 클래스 tf.Variable의 인스턴스입니다.

Device placement

변수는 with tf.device (...) : 블록을 사용하여 특정 장치가 생성 될 때 특정 장치에 고정 될 수 있습니다.

# Pin a variable to CPU.
with tf.device("/cpu:0"):
  v
= tf.Variable(...)

# Pin a variable to GPU.
with tf.device("/gpu:0"):
  v
= tf.Variable(...)

# Pin a variable to a particular parameter server task.
with tf.device("/job:ps/task:7"):
  v
= tf.Variable(...)

NOTE 

tf.Variable.assign 및 tf.train.Optimizer의 매개 변수 업데이트 작업과 같은 변수를 변경하는 작업은 변수와 동일한 장치에서 실행해야합니다. 호환되지 않는 장치 배치 지시문은 이러한 작업을 생성 할 때 무시됩니다.

장치 배치는 복제 된 설정에서 실행할 때 특히 중요합니다. 복제 된 모델의 장치 구성을 단순화 할 수있는 장치 기능에 대한 자세한 내용은 tf.train.replica_device_setter 를 참조하십시오.

Initialization(초기화)

변수 이니셜 라이저(초기화)는 모델의 다른 작업을 실행하기 전에 명시 적으로 실행해야합니다. 가장 쉬운 방법은 모든 변수 이니셜 라이저(초기화)를 실행하는 op를 추가하고 모델을 사용하기 전에 해당 op를 실행하는 것입니다.


또는 체크 포인트 파일에서 변수 값을 복원 할 수도 있습니다 (아래 참조).


변수 이니셜 라이저를 실행할 op를 추가하려면 tf.global_variables_initializer ()를 사용하십시오. 모델을 완전히 구성하고 세션에서 시작한 후에 만 ​​op를 실행하십시오.

# Create two variables.
weights
= tf.Variable(tf.random_normal([784, 200], stddev=0.35),
                      name
="weights")
biases
= tf.Variable(tf.zeros([200]), name="biases")
...
# Add an op to initialize the variables.
init_op
= tf.global_variables_initializer()

# Later, when launching the model
with tf.Session() as sess:
 
# Run the init operation.
  sess
.run(init_op)
 
...
 
# Use the model
 
...

Initialization from another Variable (다른 변수로부터의 초기화)

때때로 다른 변수의 초기 값에서 변수를 초기화해야합니다. tf.global_variables_initializer ()가 추가 한 연산은 모든 변수를 병렬로 초기화하므로 필요할 때 조심해야합니다.

다른 변수의 값에서 새 변수를 초기화하려면 다른 변수의 initialized_value () 속성을 사용하십시오. 초기화 된 값을 새 변수의 초기 값으로 직접 사용할 수도 있고 다른 변수로 사용하여 새 변수의 값을 계산할 수도 있습니다.

# Create a variable with a random value.
weights
= tf.Variable(tf.random_normal([784, 200], stddev=0.35),
                      name
="weights")
# Create another variable with the same value as 'weights'.
w2
= tf.Variable(weights.initialized_value(), name="w2")
# Create another variable with twice the value of 'weights'
w_twice
= tf.Variable(weights.initialized_value() * 2.0, name="w_twice")

Custom Initialization(사용자 정의 초기화)

편의 함수 tf.global_variables_initializer ()는 op를 추가하여 모델의 모든 변수를 초기화합니다. 변수의 명시적인 목록을 전달하여 tf.variables_initializer로 초기화 할 수도 있습니다. 변수가 초기화되었는지 확인하는 것을 포함하여 다른 옵션에 대해서는 변수 설명서( Variables Documentation)를 참조하십시오.

Saving and Restoring (저장 및 복원)

모델을 저장하고 복원하는 가장 쉬운 방법은 tf.train.Saver 객체를 사용하는 것입니다. 생성자는 그래프의 모든 변수 또는 지정된 목록의 그래프에 저장 및 복원 작업을 추가합니다. saver 객체는 이러한 ops를 실행하고 체크 포인트 파일에 대한 쓰기 또는 읽기 경로를 지정하는 메서드를 제공합니다.

그래프가없는 모델 체크 포인트를 복원하려면 먼저 메타 그래프 파일에서 그래프를 가져와야합니다 (일반적인 확장자는 .meta 임). 이것은 tf.train.import_meta_graph를 사용하여 수행됩니다.이 그래프는 복원을 수행 할 수있는 Saver를 반환합니다.

+meta 데이터 파일이 그래프라고 합니다.... 이제까지 pb가 그래프인줄 알고 있었는데... ㅎㅎㅎ 역시 기초가 탄탄해야 하는 것 같습니다.

Checkpoint Files

변수는 대개 변수 이름에서 텐서 값까지의 맵을 포함하는 바이너리 파일에 저장됩니다.

Saver 개체를 만들 때 검사 점 파일에서 변수의 이름을 선택적으로 선택할 수 있습니다. 기본적으로 각 변수에 대해 tf.Variable.name 속성 값을 사용합니다.

체크 포인트에있는 변수를 이해하려면 inspect_checkpoint 라이브러리, 특히 print_tensors_in_checkpoint_file 함수를 사용할 수 있습니다.

Saving Variables (변수 저장하기)

모델의 모든 변수를 관리하려면 tf.train.Saver ()를 사용하여 Saver를 작성하십시오.

# Create some variables.
v1
= tf.Variable(..., name="v1")
v2
= tf.Variable(..., name="v2")
...
# Add an op to initialize the variables.
init_op
= tf.global_variables_initializer()

# Add ops to save and restore all the variables.
saver
= tf.train.Saver()

# Later, launch the model, initialize the variables, do some work, save the
# variables to disk.
with tf.Session() as sess:
  sess
.run(init_op)
 
# Do some work with the model.
 
..
 
# Save the variables to disk.
  save_path
= saver.save(sess, "/tmp/model.ckpt")
 
print("Model saved in file: %s" % save_path)

Restoring Variables(변수 복원)

동일한 Saver 개체가 변수를 복원하는 데 사용됩니다. 파일에서 변수를 복원 할 때는 미리 변수를 초기화 할 필요가 없습니다.

# Create some variables.
v1
= tf.Variable(..., name="v1")
v2
= tf.Variable(..., name="v2")
...
# Add ops to save and restore all the variables.
saver
= tf.train.Saver()

# Later, launch the model, use the saver to restore variables from disk, and
# do some work with the model.
with tf.Session() as sess:
 
# Restore variables from disk.
  saver
.restore(sess, "/tmp/model.ckpt")
 
print("Model restored.")
 
# Do some work with the model
 
...

Choosing which Variables to Save and Restore (저장 및 복원 할 변수 선택)

tf.train.Saver ()에 인수를 전달하지 않으면 세이버는 그래프의 모든 변수를 처리합니다. 이들 각각은 변수가 생성 될 때 전달 된 이름으로 저장됩니다.

검사 점 파일에서 변수의 이름을 명시 적으로 지정하는 것이 유용한 경우가 있습니다. 예를 들어 "weights"라는 이름의 변수를 가진 모델을 교육했을 수도 있습니다.이 변수의 값은 "params"라는 새 변수에 복원하려는 값입니다.

또한 모델에 사용되는 변수의 하위 집합 만 저장하거나 복원하는 것이 유용한 경우도 있습니다. 예를 들어 5 개의 레이어가있는 신경망을 훈련했을 수 있습니다. 이제 6 개의 레이어로 새 모델을 학습하고 이전에 학습 된 모델의 5 개 레이어에서 새 모델의 처음 5 개 레이어로 매개 변수를 복원 할 수 있습니다.

tf.train.Saver () 생성자에 파이썬 사전을 전달하여 저장할 이름과 변수를 쉽게 지정할 수 있습니다. keys는 사용할 이름이고, value는 관리 할 변수입니다.

Notes:

- 모델 변수의 여러 하위 집합을 저장하고 복원해야하는 경우 원하는만큼의 보호기 개체를 만들 수 있습니다. 동일한 변수가 여러 세이버 객체에 나열 될 수 있으며 세이버 restore () 메소드가 실행될 때만 해당 값이 변경됩니다.

- 세션 시작시 모델 변수의 하위 집합 만 복원하는 경우 다른 변수에 대해 초기화 연산을 실행해야합니다. 자세한 정보는  tf.variables_initializer를 참조하십시오.

# Create some variables.
v1
= tf.Variable(..., name="v1")
v2
= tf.Variable(..., name="v2")
...
# Add ops to save and restore only 'v2' using the name "my_v2"
saver
= tf.train.Saver({"my_v2": v2})
# Use the saver object normally after that.
...




+ Recent posts