[英]How to to feed keras pre-trained model to computational graph?
lately I've been playing around with CNNs written in Keras, TF. 最近,我一直在玩用TF Keras编写的CNN。 Unfortunately I've come across one problem there: 不幸的是,我在这里遇到了一个问题:
In these magnificent tutorials ( https://github.com/Hvass-Labs/TensorFlow-Tutorials/blob/master/vgg16.py ; rest of the code is here), which I highly recommend, maestro loads pre-trained vgg16.tfmodel in very, very ugly way. 在我极力推荐的这些宏伟教程( https://github.com/Hvass-Labs/TensorFlow-Tutorials/blob/master/vgg16.py ;其余代码在这里)中,大师加载了预先训练的vgg16.tfmodel以非常非常难看的方式
def __init__(self):
# Now load the model from file. The way TensorFlow
# does this is confusing and requires several steps.
# Create a new TensorFlow computational graph.
self.graph = tf.Graph()
# Set the new graph as the default.
with self.graph.as_default():
# TensorFlow graphs are saved to disk as so-called Protocol Buffers
# aka. proto-bufs which is a file-format that works on multiple
# platforms. In this case it is saved as a binary file.
# Open the graph-def file for binary reading.
path = os.path.join(data_dir, path_graph_def)
with tf.gfile.FastGFile(path, 'rb') as file:
# The graph-def is a saved copy of a TensorFlow graph.
# First we need to create an empty graph-def.
graph_def = tf.GraphDef()
# Then we load the proto-buf file into the graph-def.
graph_def.ParseFromString(file.read())
# Finally we import the graph-def to the default TensorFlow graph.
tf.import_graph_def(graph_def, name='')
# Now self.graph holds the VGG16 model from the proto-buf file.
# Get a reference to the tensor for inputting images to the graph.
self.input = self.graph.get_tensor_by_name(self.tensor_name_input_image)
# Get references to the tensors for the commonly used layers.
self.layer_tensors = [self.graph.get_tensor_by_name(name + ":0") for name in self.layer_names]
And the problem is- I want my own pre-trained model load in the same/similiar way, so I can put the model into the graph of the class I am calling later and if possible, get the last lines of the code here working.(Meaning getting the tensors of wanted layers from the graph.) 问题是-我希望以相同/相似的方式加载自己的预训练模型,因此我可以将模型放入我稍后要调用的类的图中,并在可能的情况下使代码的最后几行在这里工作(意思是从图中获取所需层的张量。)
All my tries based on load_model imported from keras and the comp. 我所有的尝试都是基于从keras和comp导入的load_model 。 graph failed me. 图使我失败。 Also I didn't want to load it in a completely different way, because I would have to change A LOT of code afterwards- for a newbie kind of a big problem. 另外,我也不想以完全不同的方式加载它,因为之后我将不得不更改很多代码-对于新手来说是一个大问题。
Ok, I hope the question will reach the right person and also that it is not too trivial for you :D. 好的,我希望这个问题能找到合适的人,并且对您来说不是太琐碎:D。
BTW: The complex problem I'm solving, for you to make picture is the style transfer also in the same github repository. 顺便说一句:我要解决的复杂问题,就是在同一个github存储库中进行样式转换 ,以供您制作图片。 ( https://github.com/Hvass-Labs/TensorFlow-Tutorials/blob/master/15_Style_Transfer.ipynb ) ( https://github.com/Hvass-Labs/TensorFlow-Tutorials/blob/master/15_Style_Transfer.ipynb )
So you want to load in a keras model into tensorflow basically? 所以你想基本上将keras模型加载到tensorflow中吗? Can easily be done with the following code: 可以使用以下代码轻松完成:
import keras.backend as k
from keras.models import load_model
import tensorflow as tf
model = load_model("your model.h5") # now it's in the memory of keras
with k.get_session() as sess:
# here you have a tensorflow computational graph, view it by:
tf.summary.FileWriter("folder name", sess.graph)
# if you need a certain tensor do:
sess.graph.get_tensor_by_name("tensor name")
To have a little read about the get_session function, click here 要了解有关get_session函数的一些信息, 请单击此处。
to view the graph, you need to load in the folder from the FileWriter with tensorboard like this : 要查看图形,您需要使用tensorboard从FileWriter加载文件夹, 如下所示 :
tensorboard --logdir path/to/folder
Hope this provided some help, good luck! 希望这能提供一些帮助,祝您好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.