2016-08-23 1 views
10

My TensorFlow 모델은 tf.random_uniform을 사용하여 변수를 초기화합니다. 교육을 시작할 때 범위를 지정하고 싶습니다. 그래서 초기화 값을위한 자리 표시자를 만들었습니다.TensorFlow 피드 사전을 통해 스칼라를 전달하는 방법

init = tf.placeholder(tf.float32, name="init") 
v = tf.Variable(tf.random_uniform((100, 300), -init, init), dtype=tf.float32) 
initialize = tf.initialize_all_variables() 

교육 시작시 변수를 초기화합니다.

ValueError: initial_value must have a shape specified: Tensor("Embedding/random_uniform:0", dtype=float32) 

내가 tf.placeholder에 전달하는 올바른 shape 매개 변수를 알아낼 수 없습니다 :

session.run(initialize, feed_dict={init: 0.5}) 

나에게 다음과 같은 오류를 제공합니다. 나는 init = tf.placeholder(tf.float32, shape=0, name="init")을해야 스칼라에 대해 생각하지만, 이것은 다음과 같은 오류를 제공합니다 :

ValueError: Incompatible shapes for broadcasting: (100, 300) and (0,) 

나는 그것이 작동 tf.random_uniform에 대한 호출에서 리터럴 값 0.5으로 init를 교체하십시오.

피드 사전을 통해이 스칼라 초기 값을 전달하려면 어떻게해야합니까?

답변

19

TL; DR : 다음 스칼라 형상 init 정의는 :

init = tf.placeholder(tf.float32, shape=(), name="init") 

tf.random_uniform()의 불행 구현 세부 같다 : 그것은 현재 [에서 랜덤 값을 재조정하는 tf.add()tf.multiply() 사용 - 1, +1] ~ [, maxval]이지만, minval 또는 maxval의 형태가 알려지지 않은 경우, 및 tf.multiply()은 방송이 관련 될 수 있기 때문에 적절한 모양을 유추 할 수 없습니다. (스칼라 () 또는 []하지 0이다) 공지 형상 init를 정의

는 TensorFlow는 tf.random_uniform() 결과의 형상에 대해 올바른 추론을 그릴 수 있고, 의도 한대로 프로그램이 동작한다.

+2

너와 유진 Brevdo가이 질문에 풀 타임으로 응답 할 수 있습니까? :-) –

+3

일주일 중 일주일에 한 번, 내 풀 타임 일입니다. 다른 일주일은 재미 있습니다. :-) – mrry

+0

@mrry이 질문을 살펴보실 수 있습니까? http://stackoverflow.com/questions/41930725/tensorflow-pass-an-integer-to-graph. 고맙습니다! – void

관련 문제