2017-12-14 1 views
0

Ich versuche, definieren, einen skalaren Platzhalter wie zu definieren:Wie eine skalare Platzhalter mit bekannter Form in Tensorflow

alpha = tf.placeholder(tf.float32,shape=(),name='alpha') 

Das Problem ist, dass seine Form ist <unknown>:

print(alpha.get_shape()) 
<unknown> 

Wenn alpha wird mit einem anderen Tensor multipliziert, seine Ausgabeform ist auch <unknown>:

x = tf.placeholder(tf.float32,shape=[None,128,128,3],name='x') 
I = alpha * x 
print(I.get_shape()) 
<unknown> 

Dies erzeugt ein Problem, da I in eine Faltungsoperation eingespeist wird, die fan_in = k_h * k_w * input_.get_shape().as_list()[-1] verwendet, wobei input_I ist. Als Folge erscheint folgender Fehler:

TypeError: unsupported operand type(s) for *: 'int' and 'NoneType' 

Ich bin auf der Suche nach einem sauberen Weg, um dieses Problem zu lösen. Vorzugsweise definiert man einen skalaren Platzhalter mit einer bekannten Form.

+0

'alpha.get_shape()' für mich funktioniert. Was ist deine TF-Version? – Maxim

+0

@Maxim Es ist "1.2.1" –

+0

@Maxim Interessant in "1.0.0" funktioniert es. –

Antwort

0

Versuchen Sie einfach leere Klammern:

alpha = tf.placeholder(tf.float32, shape=[], name='alpha')

+0

Ich arbeite nicht. Ich denke, mit der Version 1.2.1 ist etwas nicht in Ordnung. –

+0

Der obige Code funktioniert bei TF Version 1.4. Ich vermute, dass 'TypeError' wegen des Multiplikationsbegriffs' fan_in' ausgelöst wird. Welche Form haben die Tensoren 'k_h' und' k_w'? –

Verwandte Themen