时间:2021-05-22
下面代码的功能是先训练一个简单的模型,然后保存模型,同时保存到一个pb文件当中,后续可以从pd文件里读取权重值。
import tensorflow as tfimport numpy as npimport osimport h5pyimport picklefrom tensorflow.python.framework import graph_utilfrom tensorflow.python.platform import gfile#设置使用指定GPUos.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 + 4w = tf.Variable(tf.random_normal([1], -1, 1))b = tf.Variable(tf.zeros([1]))y_predict = w * x + bloss = tf.reduce_mean(tf.square(y - y_predict))optimizer = tf.train.GradientDescentOptimizer(0.5)train = optimizer.minimize(loss)isTrain = False#设成True去训练模型train_steps = 100checkpoint_steps = 50checkpoint_dir = ''saver = tf.train.Saver() # defaults to saving all variables - in this case w and bx_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))以上这篇tensorflow 保存模型和取出中间权重例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
tensorflow在保存权重模型时多使用tf.train.Saver().save函数进行权重保存,保存的ckpt文件无法直接打开,不利于将模型权重导入到其他
一、TensorFlow模型保存和提取方法1.TensorFlow通过tf.train.Saver类实现神经网络模型的保存和提取。tf.train.Saver对
pytorch输出中间层特征:tensorflow输出中间特征,2种方式:1.保存全部模型(包括结构)时,需要之前先add_to_collection或者用sl
TensorFlow模型保存/载入我们在上线使用一个算法模型的时候,首先必须将已经训练好的模型保存下来。tensorflow保存模型的方式与sklearn不太一
tensorflow模型保存为saver=tf.train.Saver()函数,saver.save()保存模型,代码如下:importtensorflowas