在Java中使用TensorFlow的Python张量
我有一个用Python运行的Tensorflow程序,出于一些方便的原因,我想在Java上运行相同的程序,所以我必须保存我的模型并将其加载到Java应用程序中 我的问题是a不知道如何保存张量对象,以下是我的代码:在Java中使用TensorFlow的Python张量,java,python,tensorflow,Java,Python,Tensorflow,我有一个用Python运行的Tensorflow程序,出于一些方便的原因,我想在Java上运行相同的程序,所以我必须保存我的模型并将其加载到Java应用程序中 我的问题是a不知道如何保存张量对象,以下是我的代码: class Main: def __init__(self, checkpoint): ... self.g = tf.Graph() self.sess = tf.Session() self.img_placeholder = tf.placeho
class Main:
def __init__(self, checkpoint):
...
self.g = tf.Graph()
self.sess = tf.Session()
self.img_placeholder = tf.placeholder(tf.float32,
shape=(1, 679, 1024, 3), name='img_placeholder')
#self.preds is an instance of Tensor
self.preds = transform(self.img_placeholder)
self.saver = tf.train.Saver()
self.saver.restore(self.sess, checkpoint)
def ffwd(...):
...
_preds = self.sess.run(self.preds, feed_dict=
{self.img_placeholder: self.X})
...
因此,由于我不能创建我的张量(转换函数在幕后创建NN…),我必须保存它并将其重新加载到Java中。我找到了保存会话的方法,但没有找到张量实例
有人能给我一些关于如何实现这一点的见解吗?Python对象是对图形中特定操作输出的符号引用
图形中的操作可以通过其字符串名称进行唯一标识。该操作的特定输出由该操作输出列表中的整数索引标识。该指数通常为零,因为绝大多数操作只产生一个输出
要获取Python中张量
对象引用的操作名和输出索引,可以执行以下操作:
print(preds.op.name)
print(preds.value_index) # Most likely will be 0
然后在Java中,您可以按名称馈送/获取节点。
假设preds.op.name
返回字符串foo
,并返回整数1,那么在Java中,您可以执行以下操作:
session.runner().feed("img_placeholder").fetch("foo", 1)
(详情请参见)
您可能会发现链接到中的幻灯片以及这些幻灯片中的演讲者备注非常有用
希望有帮助。Python对象是对图形中特定操作输出的符号引用
图形中的操作可以通过其字符串名称进行唯一标识。该操作的特定输出由该操作输出列表中的整数索引标识。该指数通常为零,因为绝大多数操作只产生一个输出
要获取Python中张量
对象引用的操作名和输出索引,可以执行以下操作:
print(preds.op.name)
print(preds.value_index) # Most likely will be 0
然后在Java中,您可以按名称馈送/获取节点。
假设preds.op.name
返回字符串foo
,并返回整数1,那么在Java中,您可以执行以下操作:
session.runner().feed("img_placeholder").fetch("foo", 1)
(详情请参见)
您可能会发现链接到中的幻灯片以及这些幻灯片中的演讲者备注非常有用
希望有帮助。您可能需要检查tensorflow lite,它使用不同的模型,这应该是在java中加载的唯一方法。这似乎是为android设备保存模型的一种方式,而不是我正在搜索的。我已经知道如何将会话从Python保存到Java,但我不能保存/加载的是Tensor实例(在运行会话时用作抓取),您可能需要检查tensorflow lite,它使用不同的模型,这应该是在Java中加载的唯一方法。这似乎是为android设备保存模型的一种方式,而不是我正在搜索的。我已经知道如何将会话从Python保存到Java,但我不能保存/加载的是Tensor实例(在运行会话时用作抓取)