2016-08-03 61 views
0

Ich versuche, die Modellparameter (W & b) von Tensorflow zu Matlab als Wörterbuch zu übergeben. Aber wenn ich es in Matlab in eine Struktur umwandle, sind die Felder noch Tensorvariablen und ich kann die gewünschten Operationen nicht ausführen. Gibt es eine Möglichkeit, das zu beheben und sie in Double oder Matrix zu konvertieren?Wie konvertiere ich Tensorflow-Variablen in Matlab-Strukturen?

In Tensor Flow:

return {'W': W, 'b': b} 

in Matlab:

P = py.myModelOutput(samples,labels) 
model.parameters = struct(P) 

Dann, wenn ich einen Druck der Struktur in Matlab bekommen es zeigt folgendes:

ans = 

W: [1x1 py.tensorflow.python.ops.variables.Variable] 
b: [1x1 py.tensorflow.python.ops.variables.Variable] 

Der Versuch, konvertieren Sie die Felder doppelt, hilft auch nicht:

Fehler bei der Verwendung von double Die Konvertierung von py.tensorflow.python.ops.variables.Variable in double ist nicht möglich.

+0

Sie müssen es zuerst konvertieren Arrays numpy mit 'session.run' –

Antwort

0

in Ihrem TensorFlow Programm Angenommen, Sie haben ein tf.Session Objekt sess genannt, sollten Sie Ihren Code ändern, Folgendes zurück:

def myModelOutput(...): 
    # ... 
    sess = tf.Session() 
    # ... 

    # Convert the `tf.Variable` objects `W` and `b` to NumPy arrays. 
    W_val, b_val = sess.run([W, b]) 

    sess.close() # Assumes `sess` is local to the function. 

    return {'W': W_val, 'b': b_val} 
+0

Dank so mcuh! Ich nehme an, dass W.eval() den gleichen Job ausführt, oder muss er ausgeführt werden()? Am Ende habe ich W.eval() und b.eval() zurückgegeben, was es zu einem Tupel und nicht zu einem Wörterbuch gemacht hat, aber ich würde lieber ein Wörterbuch zurückgeben. Ich werde es jetzt versuchen. –

+0

Es ist äquivalent, aber es könnte etwas effizienter sein, mehrere Argumente an 'sess.run()' zu übergeben, da dies nur einmal die TensorFlow-Laufzeit aufruft. – mrry