2016-08-03 68 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