我正在尝试创建一个模型图,其中我的输入是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方法
答案 0 :(得分:0)
placeholder
只是tensorflow中的一个空变量,您可以向其中提供numpy
个值。现在,你要做的事情没有意义。你无法从空变量中获取价值。
如果你想standardize
你的张量,为什么要先将它转换为numpy var?您可以使用tensorflow
直接执行此操作。
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