2016-08-23 9 views
10

Mój model TensorFlow używa tf.random_uniform do zainicjowania zmiennej. Chciałbym określić zakres kiedy zaczynam trening, więc stworzyłem symbol zastępczy dla wartości inicjalizacyjnej.Jak przekazać skalar za pośrednictwem słownika kanału 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() 

Inicjuję zmienne na początku szkolenia w taki sposób.

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

To daje mi następujący błąd:

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

nie mogę dowiedzieć się prawidłową shape parametr przekazywany do tf.placeholder. Myślę dla skalara zrobić init = tf.placeholder(tf.float32, shape=0, name="init") ale to daje następujący błąd:

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

Gdybym zastąpić init o wartości dosłownym 0.5 w wywołaniu tf.random_uniform to działa.

Jak przekazać tę wartość początkową skalarną za pomocą słownika kanału?

Odpowiedz

19

TL; DR: Definiowanie init ze skalarnym kształcie następująco:

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

To wygląda nieszczęśliwego szczegółach realizacji tf.random_uniform(): obecnie używa tf.add() i tf.multiply() aby przeskalować wartość losową z [- 1, +1] do [minval, maxval], ale jeśli kształt minval lub maxval jest nieznany, tf.add() i tf.multiply() nie mogą wywnioskować właściwych kształtów, ponieważ może to dotyczyć emisji.

Definiując init ze znanym kształcie (gdzie skalar jest () lub [] nie 0) TensorFlow może wyciągnąć odpowiednie wnioski o kształcie wyniku tf.random_uniform(), a Twój program powinien działać zgodnie z przeznaczeniem.

+2

Czy ty i Eugene Brevdo możecie odpowiedzieć na te pytania na swoje etaty? :-) –

+3

Jeden tydzień z siedmiu, to moja praca na pełen etat - w pozostałe tygodnie robię to dla zabawy! :-) – mrry

+0

@mrry Czy możesz rzucić okiem na to pytanie http://stackoverflow.com/questions/41930725/tensorflow-pass-an-integer-to-graph. Dziękuję Ci! – void

Powiązane problemy