Model 保存tensorflow模型的权重和偏差

Model 保存tensorflow模型的权重和偏差,model,Model,我使用Tensorflow创建了一个简单的3层MNIST模型,并尝试将模型保存为.pb文件,以便提取最终的层外权重和隐藏权重。但我无法得到最终的隐藏层和权重。请指导我如何保存重量 我在代码中添加了以下行: 使用tf.Graph()作为默认值(): saver=tf.train.saver() sess=tf.Session() saver.restore(sess,/tmp/model.ckpt“) 但是获取ValueError:没有要保存的变量。我到底需要在哪里添加以上内容 from\uuu

我使用Tensorflow创建了一个简单的3层MNIST模型,并尝试将模型保存为.pb文件,以便提取最终的层外权重和隐藏权重。但我无法得到最终的隐藏层和权重。请指导我如何保存重量

我在代码中添加了以下行:

使用tf.Graph()作为默认值():
saver=tf.train.saver()
sess=tf.Session()
saver.restore(sess,/tmp/model.ckpt“)
但是获取
ValueError:没有要保存的变量
。我到底需要在哪里添加以上内容

from\uuuuu future\uuuuu导入打印功能
#导入MNIST数据
从tensorflow.examples.tutorials.mnist导入输入数据
mnist=输入数据。读取数据集(“/tmp/data/”,one\u hot=False)
导入tensorflow作为tf
路径\u到\u模型\u pb=“/u”
#参数
学习率=0.1
步骤数=20
批量大小=128
显示步进=100
#saver=tf.train.saver()
#网络参数
n_hidden_1=15#第一层神经元数
#n_hidden_2=256#第二层神经元数量
num_input=784#MNIST数据输入(img形状:28*28)
num#U classes=10#MNIST总类数(0-9位)
#定义神经网络
def神经网络(x_dict):
#在多个输入的情况下,TF估计器输入是dict
x=x_dict[“图像”]
#具有256个神经元的隐藏完全连接层
layer_1=tf.layers.dense(x,n_hidden_1)
#具有256个神经元的隐藏完全连接层
#layer_2=tf.layers.dense(layer_1,n_hidden_2)
#输出完全连接的层,每个类有一个神经元
out\u layer=tf.layers.density(layer\u 1,num\u类)
返回输出层
#定义模型函数(遵循TF估计器模板)
def型号(功能、标签、模式):
#建立神经网络
logits=神经网络(特征)
#预言
pred_classes=tf.argmax(logits,axis=1)
pred_probas=tf.nn.softmax(logits)
#如果是预测模式,则提前返回
如果mode==tf.estimator.ModeKeys.PREDICT:
返回tf.estimator.EstimatorSpec(模式,预测=预测类)
#定义损失和优化器
损耗op=tf.减少平均值(tf.nn.sparse\u softmax\u交叉熵)(
logits=logits,labels=tf.cast(labels,dtype=tf.int32)))
优化器=tf.train.GradientDescentOptimizer(学习率=学习率)
列车运行=优化器。最小化(损失运行,
global\u step=tf.train.get\u global\u step())
#评估模型的准确性
acc_op=tf.metrics.Accurance(标签=标签,预测=预测类)
#TF Estimators需要返回一个EstimatorSpec,指定
#用于培训、评估等的不同操作。。。
estim_specs=tf.estimator.estimator Spec(
模式=模式,
预测=预测类,
损失=损失,
列车运行=列车运行,
eval_metric_ops={'acc_ops':acc_ops})
saver=tf.train.saver()
返回estim_规格
#建立估计器
模型=tf.估计量.估计量(模型_fn)
#定义培训的输入功能
输入\u fn=tf.estimator.inputs.numpy\u输入\u fn(
x={'images':mnist.train.images},y=mnist.train.labels,
批量大小=批量大小,num\u epochs=None,shuffle=True)
#训练模型
模型列车(输入fn,步数=步数)
#评估模型
#定义用于评估的输入函数
使用tf.Graph()作为默认值():
saver=tf.train.saver()
sess=tf.Session()
输入\u fn=tf.estimator.inputs.numpy\u输入\u fn(
x={'images':mnist.test.images},y=mnist.test.labels,
批量大小=批量大小,随机播放=错误)
#使用估计器“评估”方法
e=模型。评估(输入\u fn)
打印(“测试精度:”,e[“精度”])
saver.restore(sess,/tmp/model.ckpt“)
#save\u path=saver.save(sess,“/tmp/model.ckpt”)
tf.train.write_graph(tf.get_default_graph(),路径_到_model_pb,
“已保存的_model.pb”,作为_text=False)

您尚未在所处的图形中构建网络
Estimator
使用自己的图表,应该为您处理会话管理。如果希望模型保存权重,请将
model\u dir
传递给构造函数

model = tf.estimator.Estimator(model_fn, '/tmp/my_model_dir')
model.train(train_input_fn, steps=num_steps)
e = model.evaluate(eval_input_fn)
如果您想在估计器框架之外处理网络,只需调用
model\u fn
并从传递给估计器的
model\u dir
加载变量。例如,要根据一些numpy
特征数据生成推断,请执行以下操作:

graph = tf.Graph()
with graph.as_default():
    features = tf.placeholder(shape=feature_shape, dtype=tf.float32)
    labels = None
    mode = 'predict'

    spec = model_fn(features, labels, mode)
    saver = tf.train.Saver()

with tf.Session(graph=graph) as sess:
    saver.restore(sess, tf.train.latest_checkpoint('/tmp/my_model_dir'))
    sess.run(spec.inference, feed_dict={features: feature_data})