如何将tensorflow变量转换为numpy数组

时间:2018-01-18 15:45:58

标签: python numpy tensorflow

我正在尝试创建一个模型图,其中我的输入是tensorflow变量,我从我的java程序输入 在我的代码中,我使用numpy方法,我需要将我的tensorflow变量输入转换为numpy数组输入

这是我的代码段

import tensorflow as tf
import numpy as np
eps = np.finfo(float).eps
EXPORT_DIR = './model'

def standardize(x):
   med0 = np.median(x)
   mad0 = np.median(np.abs(x - med0))
   x1 = (x - med0) / (mad0 + eps)
   return x1

#tensorflow input variable
a = tf.placeholder(tf.float32, name="input")
with tf.Session() as session:
session.run(tf.global_variables_initializer())
 #Converting the input variable to numpy array
 tensor = a.eval()

 #calling standardize method
 numpyArray = standardize(tensor)

 #converting numpy array to tf
 tf.convert_to_tensor(numpyArray)

 #creating graph
 graph = tf.get_default_graph()
 tf.train.write_graph(graph, EXPORT_DIR, 'model_graph.pb', as_text=False)

我收到错误:InvalidArgumentError(请参阅上面的回溯):您必须为占位符张量输入值输入' dtype float in line tensor = a.eval()

当我代替占位符给出恒定值时,它就会工作并生成图形。但我想从我的java代码输入。 有没有办法做到这一点,或者我需要将我所有的numpy方法转换为tensorflow方法

1 个答案:

答案 0 :(得分:0)

placeholder只是tensorflow中的一个空变量,您可以向其中提供numpy个值。现在,你要做的事情没有意义。你无法从空变量中获取价值。

如果你想standardize你的张量,为什么要先将它转换为numpy var?您可以使用tensorflow直接执行此操作。

以下摘自this stackoverflow ans

def get_median(v):
    v = tf.reshape(v, [-1])
    m = v.get_shape()[0]//2
    return tf.nn.top_k(v, m).values[m-1]

现在,您可以将您的功能实现为

def standardize(x):
    med0 = get_median(x)
    mad0 = get_median(tf.abs(x - med0))
    x1 = (x - med0)/(mad0 + eps)
    return x1