간단한 Q- 학습을 위해 TensorFlow를 사용하기 시작했지만 tf.layers
및 tf.contrib.layers
을 사용하여 구성된 레이어와 함께 가변 범위를 사용하려고 할 때 문제가 발생했습니다. 간단히 말해, 서로 다른 입력 텐서에 같은 레이어를 적용하고 싶습니다 (예를 들어, 현재 및 다음 Q 값을 유지하기 위해). 이 코드를 실행하려고Tensorflow tf.layers, tf.contrib.layers가 가변 범위와 함께 작동하지 않습니다.
import tensorflow as tf
inp1 = tf.placeholder(tf.float64, (4,1))
inp2 = tf.placeholder(tf.float64, (4,1))
def process(inp):
with tf.variable_scope("foo", reuse=True):
return tf.layers.dense(inp, 12, name="bar", reuse=True)
process(inp1)
process(inp2)
다음과 같은 예외 제공합니다 : 여기 tf.layers
를 사용하여 최소한의 예는 내가 tf.layers.dense()
에서 reuse=True
를 설정하면 그것이 이미 정의 계층을 찾아보십시오하게 이해
ValueError: Variable foo/bar/kernel does not exist, or was not created with
tf.get_variable(). Did you mean to set reuse=None in VarScope?
하는 그것은 실패 할 수도 있습니다. 그러나 전화를 tf.layers.dense(inp, 12, name="bar")
으로 변경하면 동일한 예외가 발생하여 실패합니다.
내가 tf.variable_scope()
에 reuse=None
을 설정하면, 후자의 버전은 제외 process(inp2)
의 통화 중 실패 tf.contrib.layers
를 사용하는 경우
ValueError: Variable foo/bar/kernel already exists, disallowed.
Did you mean to set reuse=True in VarScope?
불행하게도, 유사한 오류가 발생합니다.
내 질문은 : tf.layers
을 가변 범위로 사용할 수있는 방법이 있습니까? 나는 가중치와 바이어스를 따로 정의 할 수 있다는 것을 알고 있지만 tf.layers
에 의해 주어진 추상화를 유지하는 것이 좋습니다. 고마워요!
내 설정은 Windows 10에서 Python 3.6.1 (64 비트 Anaconda 4.4.0에서 pip로 설치됨)로 실행되는 TensorFlow 1.3.0 (CPU)입니다.
P. this presentation의 17 페이지에있는 레이어의 변수 범위 사용을 발견했습니다.