tensorflow 保存模型和取出中间权重例子

作者:binqiang2wang 时间:2021-05-11 07:30:11 

下面代码的功能是先训练一个简单的模型,然后保存模型,同时保存到一个pb文件当中,后续可以从pd文件里读取权重值。


import tensorflow as tf
import numpy as np
import os
import h5py
import pickle
from tensorflow.python.framework import graph_util
from tensorflow.python.platform import gfile
#设置使用指定GPU
os.environ['CUDA_VISIBLE_DEVICES'] = '1'
#下面这段代码是在训练好之后将所有的权重名字和权重值罗列出来,训练的时候需要注释掉
reader = tf.train.NewCheckpointReader('./model.ckpt-100')
variables = reader.get_variable_to_shape_map()
for ele in variables:
 print(ele)
 print(reader.get_tensor(ele))

x = tf.placeholder(tf.float32, shape=[None, 1])
y = 4 * x + 4

w = tf.Variable(tf.random_normal([1], -1, 1))
b = tf.Variable(tf.zeros([1]))
y_predict = w * x + b

loss = tf.reduce_mean(tf.square(y - y_predict))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

isTrain = False#设成True去训练模型
train_steps = 100
checkpoint_steps = 50
checkpoint_dir = ''

saver = tf.train.Saver() # defaults to saving all variables - in this case w and b
x_data = np.reshape(np.random.rand(10).astype(np.float32), (10, 1))

with tf.Session() as sess:
 sess.run(tf.global_variables_initializer())
 if isTrain:
   for i in xrange(train_steps):
     sess.run(train, feed_dict={x: x_data})
     if (i + 1) % checkpoint_steps == 0:
       saver.save(sess, checkpoint_dir + 'model.ckpt', global_step=i+1)
 else:
   ckpt = tf.train.get_checkpoint_state(checkpoint_dir)
   if ckpt and ckpt.model_checkpoint_path:
     saver.restore(sess, ckpt.model_checkpoint_path)
   else:
     pass  
   print(sess.run(w))
   print(sess.run(b))
   graph_def = tf.get_default_graph().as_graph_def()
   #通过修改下面的函数,个人觉得理论上能够实现修改权重,但是很复杂,如果哪位有好办法,欢迎指教
   output_graph_def = graph_util.convert_variables_to_constants(sess, graph_def, ['Variable'])
   with tf.gfile.FastGFile('./test.pb', 'wb') as f:
     f.write(output_graph_def.SerializeToString())

with tf.Session() as sess:
#对应最后一部分的写,这里能够将对应的变量取出来
 with gfile.FastGFile('./test.pb', 'rb') as f:
   graph_def = tf.GraphDef()
   graph_def.ParseFromString(f.read())
 res = tf.import_graph_def(graph_def, return_elements=['Variable:0'])
 print(sess.run(res))
 print(sess.run(graph_def))

来源:https://blog.csdn.net/m0_37052320/article/details/79845537

标签:tensorflow,保存模型,权重
0
投稿

猜你喜欢

  • python通过伪装头部数据抵抗反爬虫的实例

    2022-03-11 09:56:04
  • Python实现的NN神经网络算法完整示例

    2023-10-06 04:30:41
  • PHP 修改SESSION的生存时间案例详解

    2023-06-11 19:44:20
  • JavaScript实现前端倒计时效果

    2024-06-05 09:34:10
  • 异步任务队列Celery在Django中的使用方法

    2023-08-03 06:26:39
  • CentOS8部署LNMP环境之编译安装mysql8.0.29的教程详解

    2024-01-18 04:54:14
  • SQL数据库连接超时时间已到的问题

    2024-01-20 15:05:53
  • 将滚动条(scrollbar)保持在最底部的方法

    2008-02-21 10:05:00
  • Python IDLE清空窗口的实例

    2023-11-22 17:59:23
  • MySQL数据库的触发器和事务

    2024-01-15 21:35:08
  • Spring boot连接MySQL 8.0可能出现的问题

    2024-01-17 17:04:28
  • git fetch与git pull的区别详解

    2023-10-16 07:58:14
  • Windows 安装 Anaconda3+PyCharm的方法步骤

    2023-05-21 07:40:53
  • 详解pandas的外部数据导入与常用方法

    2023-05-15 19:15:11
  • 谈一谈bootstrap响应式布局

    2023-08-22 20:17:39
  • Go语言计算两个经度和纬度之间距离的方法

    2024-04-29 13:06:04
  • php生成curl命令行的方法

    2023-07-23 22:19:42
  • matplotlib绘制多个子图(subplot)的方法

    2023-01-17 08:27:45
  • SQLServer 设置单词首字母大写

    2024-01-12 20:14:41
  • Python线程指南分享

    2023-01-13 15:33:58
  • asp之家 网络编程 m.aspxhome.com