Python Tensorflow:将模型保存到model.pb,以便以后可视化

Python Tensorflow:将模型保存到model.pb,以便以后可视化,python,tensorflow,deep-learning,Python,Tensorflow,Deep Learning,我找到了以下代码片段来可视化保存到*.pb文件中的模型: model_filename ='saved_model.pb' with tf.Session() as sess: with gfile.FastGFile(path_to_model_pb, 'rb') as f: data = compat.as_bytes(f.read()) sm = saved_model_pb2.SavedModel() sm.ParseFromStr

我找到了以下代码片段来可视化保存到
*.pb
文件中的模型:

model_filename ='saved_model.pb'
with tf.Session() as sess:
    with gfile.FastGFile(path_to_model_pb, 'rb') as f:
        data = compat.as_bytes(f.read())
        sm = saved_model_pb2.SavedModel()
        sm.ParseFromString(data)
        g_in = tf.import_graph_def(sm.meta_graphs[0].graph_def)
        LOGDIR='.'
        train_writer = tf.summary.FileWriter(LOGDIR)
        train_writer.add_graph(sess.graph)
现在我正在努力创建
保存的_model.pb
。如果我的session.run如下所示:

  _, cr_loss = sess.run([train_op,cross_entropy_loss],
                         feed_dict={input_image: images,
                                    correct_label: gt_images,
                                    keep_prob:  KEEP_PROB,
                                    learning_rate: LEARNING_RATE}
                        )
如何将
train\u op
中包含的图形保存到
saved\u model.pb

最简单的方法是使用。通常,您只需要执行以下操作:

tf.train.write_graph(my_graph, path_to_model_pb,
                     'saved_model.pb', as_text=False)
my_graph
如果使用默认图形或任何其他(或)对象,则可以是


请注意,这会保存图形定义,可以将其可视化,但如果您有变量,除非您先保存它们的值(因为这些值仅在会话对象中,而不是图形本身中)。

我将分步骤介绍此问题:

要可视化权重、偏差等变量,请使用tf.summary.histogram

weights = {
    'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),
    'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),
    'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))
}
tf.summary.histogram("weight1", weights['h1'])
tf.summary.histogram("weight2", weights['h2'])
tf.summary.histogram("weight3", weights['out'])
biases = {
    'b1': tf.Variable(tf.random_normal([n_hidden_1])),
    'b2': tf.Variable(tf.random_normal([n_hidden_2])),
    'out': tf.Variable(tf.random_normal([n_classes]))
}
tf.summary.histogram("bias1", biases['b1'])
tf.summary.histogram("bias2", biases['b2'])
tf.summary.histogram("bias3", biases['out'])
cost = tf.sqrt(tf.reduce_mean(tf.squared_difference(pred, y)))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
tf.summary.scalar('rmse', cost)
然后在培训过程中包括以下代码

summaries = tf.summary.merge_all()
with tf.Session() as sess:
    sess.run(init)
    # Get data
    writer = tf.summary.FileWriter("histogram_example", sess.graph)
    # Training cycle
            # Run optimization op (backprop) and cost op (to get loss value)
            summ, p, _, c = sess.run([summ, pred, optimizer, cost], feed_dict={x: batch_x,
                                                          y: batch_y,})
            writer.add_summary(summ, global_step=epoch*total_batch+i)

谢谢但是我必须做什么才能让tf.get_default_graph()真正返回我刚刚构建的图呢?请参阅更新后的原始问题以了解一些规范。@user1934212我已更新了答案。如果您的图形是在其他地方创建的(例如调用堆栈中的上一个函数),请将代码放入类似“my_graph.as_default():的上下文中,然后将返回正确的图形。如果图形是在其他地方创建的,如果不是,我如何从
train\u op
my\u graph
,然后,您可以简单地将图形作为
train\u op.graph
。什么是
path\u to\u model\u pb
?为什么此参数与
'saved_model.pb'
一个参数一起存在?