2016-08-03 54 views
0

我想將張量流模型參數(W & b)作爲字典傳遞給matlab。但是當我將它轉換爲matlab中的結構時,這些字段仍然是張量變量,我無法對它們進行所需的操作。有什麼方法可以解決這個問題並將它們轉換爲double或matrix?如何將Tensorflow變量轉換爲Matlab結構?

在張量流:

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

在MATLAB:

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

然後當我在MATLAB中結構的打印它顯示以下內容:

ans = 

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

嘗試將字段轉換爲雙倍也沒有幫助:

double(model.parameters.W) 

使用雙重錯誤 從py.tensorflow.python.ops.variables.Variable轉換爲double是不可能的。

+0

你必須先轉換用它來numpy的陣列'session.run' –

回答

0

假設你TensorFlow程序你有一個tf.Session對象調用sess,您應該修改代碼以返回以下內容:

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

謝謝所以媽媽!我假設W.eval()執行相同的工作,還是必須運行()?我最終返回了W.eval()和b.eval(),它把它變成了一個元組而不是字典,但我寧願返回一個字典。我現在要試試這個。 –

+0

它是等價的,但將多個參數傳遞給'sess.run()'可能會稍微高效一些,因爲它只調用一次TensorFlow運行時。 – mrry