我已经使用新数据集微调了初始模型,并将其保存为Keras中的“ .h5”模型。现在我的目标是在仅接受“ .pb”扩展名的android
Tensorflow上运行我的模型。问题是Keras或tensorflow中是否有任何库可以进行此转换?到目前为止,我已经看过这篇文章:https :
//blog.keras.io/keras-as-a-simplified-interface-to-tensorflow-
tutorial.html,但还不清楚。
Keras本身不包括将TensorFlow图导出为协议缓冲区文件的任何方法,但是您可以使用常规TensorFlow实用程序来实现。这是一篇博客文章,解释了如何使用freeze_graph.py
TensorFlow中包含的实用程序脚本执行此操作,这是完成操作的“典型”方式。
但是,我个人觉得必须创建一个检查点,然后运行一个外部脚本来获取模型,但我更喜欢从我自己的Python代码中执行此操作,因此我使用了这样的函数:
def freeze_session(session, keep_var_names=None, output_names=None, clear_devices=True):
"""
Freezes the state of a session into a pruned computation graph.
Creates a new computation graph where variable nodes are replaced by
constants taking their current value in the session. The new graph will be
pruned so subgraphs that are not necessary to compute the requested
outputs are removed.
@param session The TensorFlow session to be frozen.
@param keep_var_names A list of variable names that should not be frozen,
or None to freeze all the variables in the graph.
@param output_names Names of the relevant graph outputs.
@param clear_devices Remove the device directives from the graph for better portability.
@return The frozen graph definition.
"""
graph = session.graph
with graph.as_default():
freeze_var_names = list(set(v.op.name for v in tf.global_variables()).difference(keep_var_names or []))
output_names = output_names or []
output_names += [v.op.name for v in tf.global_variables()]
input_graph_def = graph.as_graph_def()
if clear_devices:
for node in input_graph_def.node:
node.device = ""
frozen_graph = tf.graph_util.convert_variables_to_constants(
session, input_graph_def, output_names, freeze_var_names)
return frozen_graph
这是实施的启发freeze_graph.py
。参数也类似于脚本。session
是TensorFlow会话对象。keep_var_names
仅在您希望不冻结某些变量时才需要(例如,对于有状态模型),通常不需要。output_names
是包含产生所需输出的操作名称的列表。clear_devices
只需删除任何设备指令即可使图形更具可移植性。因此,对于model
具有一个输出的典型Keras
,您将执行以下操作:
from keras import backend as K
# Create, compile and train model...
frozen_graph = freeze_session(K.get_session(),
output_names=[out.op.name for out in model.outputs])
然后,您可以像往常一样使用tf.train.write_graph
以下命令将图形写入文件:
tf.train.write_graph(frozen_graph, "some_directory", "my_model.pb", as_text=False)
我今天花了几个小时在谷歌上搜索大多数解决方案都过时了。我在项目所遵从的窗口上使用eclipse,但我无法使它成为一个独立的应用程序,如果没有: 有哪些方法可以将JavaFX11项目导出到可执行jar中,而无需在导出后将其链接到JavaFX-SDK-11.0.2? 谢了。
我想作为jar导出的库是一个Android库。它被称为“Standout”,可以从GitHub下载。https://github.com/pingpongboss/standout
换句话说,我正在尝试用JavaFX做一些事情,就像蜡染允许你用Swing做的事情一样。 我希望能够在我的 JavaFX UI 中捕获任意节点的外观,就像 Node.snapshot() 一样,除了我需要像 SVG 这样的矢量格式的图像,而不是光栅图像。(将节点的光栅快照插入到SVG图像中是不够的,它需要是一个适当的,可缩放的矢量图像。 这是一个长期项目,所以我甚至愿意在JavaFX的保留模式API
我需要将一些HTML导出到Word中,发现了以下链接:https://www.codexworld.com/export-html-to-word-doc-docx-using-javascript 代码如下。它生成一个。doc文件(旧的Word格式),但我更喜欢。docx。文章说只要稍加修改就可以完成,但没有说明如何完成。有人知道怎么做这个改变吗?
问题内容: 我最近将Hibernate从5.0更新为5.1,并且API发生了变化。迁移文档提到了此更改,但未说明如何使用较新的API。而且,我还找不到其他支持示例来解决重大变化。 问题答案: 我偶然发现了可以帮助解决API差异的代码差异:https : //gitlab.nuiton.org/nuiton/topia/commit/0c57f073ad879a981e9fa3315f0e04669