Tensorflow如何加载变量名和变量值
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要为大家展示了"Tensorflow如何加载变量名和变量值",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Tensorflow如何加载变量名和变量
千家信息网最后更新 2026年11月01日Tensorflow如何加载变量名和变量值
这篇文章主要为大家展示了"Tensorflow如何加载变量名和变量值",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Tensorflow如何加载变量名和变量值"这篇文章吧。
则从这些checkpoint文件中加载变量名和变量值代码如下:
model_dir = './ckpt-182802'import tensorflow as tffrom tensorflow.python import pywrap_tensorflowreader = pywrap_tensorflow.NewCheckpointReader(model_dir)var_to_shape_map = reader.get_variable_to_shape_map()for key in var_to_shape_map: print("tensor_name: ", key) print(reader.get_tensor(key)) # Remove this is you want to print only variable namesMnist
下面将给出一个基于卷积神经网络的手写数字识别样例:
# -*- coding: utf-8 -*-import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_datafrom tensorflow.python.framework import graph_utillog_dir = './tensorboard'mnist = input_data.read_data_sets(train_dir="./mnist_data",one_hot=True)if tf.gfile.Exists(log_dir): tf.gfile.DeleteRecursively(log_dir)tf.gfile.MakeDirs(log_dir)#定义输入数据mnist图片大小28*28*1=784,None表示batch_sizex = tf.placeholder(dtype=tf.float32,shape=[None,28*28],name="input")#定义标签数据,mnist共10类y_ = tf.placeholder(dtype=tf.float32,shape=[None,10],name="y_")#将数据调整为二维数据,w*H*c---> 28*28*1,-1表示N张image = tf.reshape(x,shape=[-1,28,28,1])#第一层,卷积核={5*5*1*32},池化核={2*2*1,1*2*2*1}w1 = tf.Variable(initial_value=tf.random_normal(shape=[5,5,1,32],stddev=0.1,dtype=tf.float32,name="w1"))b1= tf.Variable(initial_value=tf.zeros(shape=[32]))conv1 = tf.nn.conv2d(input=image,filter=w1,strides=[1,1,1,1],padding="SAME",name="conv1")relu1 = tf.nn.relu(tf.nn.bias_add(conv1,b1),name="relu1")pool1 = tf.nn.max_pool(value=relu1,ksize=[1,2,2,1],strides=[1,2,2,1],padding="SAME")#shape={None,14,14,32}#第二层,卷积核={5*5*32*64},池化核={2*2*1,1*2*2*1}w2 = tf.Variable(initial_value=tf.random_normal(shape=[5,5,32,64],stddev=0.1,dtype=tf.float32,name="w2"))b2 = tf.Variable(initial_value=tf.zeros(shape=[64]))conv2 = tf.nn.conv2d(input=pool1,filter=w2,strides=[1,1,1,1],padding="SAME")relu2 = tf.nn.relu(tf.nn.bias_add(conv2,b2),name="relu2")pool2 = tf.nn.max_pool(value=relu2,ksize=[1,2,2,1],strides=[1,2,2,1],padding="SAME",name="pool2")#shape={None,7,7,64}#FC1w3 = tf.Variable(initial_value=tf.random_normal(shape=[7*7*64,1024],stddev=0.1,dtype=tf.float32,name="w3"))b3 = tf.Variable(initial_value=tf.zeros(shape=[1024]))#关键,进行reshapeinput3 = tf.reshape(pool2,shape=[-1,7*7*64],name="input3")fc1 = tf.nn.relu(tf.nn.bias_add(value=tf.matmul(input3,w3),bias=b3),name="fc1")#shape={None,1024}#FC2w4 = tf.Variable(initial_value=tf.random_normal(shape=[1024,10],stddev=0.1,dtype=tf.float32,name="w4"))b4 = tf.Variable(initial_value=tf.zeros(shape=[10]))fc2 = tf.nn.bias_add(value=tf.matmul(fc1,w4),bias=b4,name="logit")#shape={None,10}#定义交叉熵损失# 使用softmax将NN计算输出值表示为概率y = tf.nn.softmax(fc2,name="out")# 定义交叉熵损失函数cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=fc2,labels=y_)loss = tf.reduce_mean(cross_entropy)tf.summary.scalar('Cross_Entropy',loss)#定义solvertrain = tf.train.AdamOptimizer(learning_rate=0.0001).minimize(loss=loss)for var in tf.trainable_variables(): print var#train = tf.train.AdamOptimizer(learning_rate=0.0001).minimize(loss=loss)#定义正确值,判断二者下标index是否相等correct_predict = tf.equal(tf.argmax(y,1),tf.argmax(y_,1))#定义如何计算准确率accuracy = tf.reduce_mean(tf.cast(correct_predict,dtype=tf.float32),name="accuracy")tf.summary.scalar('Training_ACC',accuracy)#定义初始化opmerged = tf.summary.merge_all()init = tf.global_variables_initializer()saver = tf.train.Saver()#训练NNwith tf.Session() as session: session.run(fetches=init) writer = tf.summary.FileWriter(log_dir,session.graph) #定义记录日志的位置 for i in range(0,500): xs, ys = mnist.train.next_batch(100) session.run(fetches=train,feed_dict={x:xs,y_:ys}) if i == 0: train_accuracy,summary = session.run(fetches=[accuracy,merged],feed_dict={x:xs,y_:ys}) writer.add_summary(summary,i) print(i,"accuracy=",train_accuracy) ''' #训练完成后,将网络中的权值转化为常量,形成常量graph,注意:需要x与label constant_graph = graph_util.convert_variables_to_constants(sess=session, input_graph_def=session.graph_def, output_node_names=['out','y_','input']) #将带权值的graph序列化,写成pb文件存储起来 with tf.gfile.FastGFile("lenet.pb", mode='wb') as f: f.write(constant_graph.SerializeToString()) ''' saver.save(session,'./ckpt')补充:查看tensorflow产生的checkpoint文件内容的方法
tensorflow在保存权重模型时多使用tf.train.Saver().save 函数进行权重保存,保存的ckpt文件无法直接打开,但tensorflow提供了相关函数 tf.train.NewCheckpointReader 可以对ckpt文件进行权重查看。
import osfrom tensorflow.python import pywrap_tensorflowcheckpoint_path = os.path.join('modelckpt', "fc_nn_model")# Read data from checkpoint filereader = pywrap_tensorflow.NewCheckpointReader(checkpoint_path)var_to_shape_map = reader.get_variable_to_shape_map()# Print tensor name and valuesfor key in var_to_shape_map: print("tensor_name: ", key) print(reader.get_tensor(key))其中'modelckpt'是存放.ckpt文件的文件夹,"fc_nn_model"是文件名。
var_to_shape_map是一个字典,其中的键值是变量名,对应的值是该变量的形状,如
{'LSTM_input/bias_LSTM/Adam_1': [128]}想要查看某变量值时,需要调用get_tensor函数,即输入以下代码:
reader.get_tensor('LSTM_input/bias_LSTM/Adam_1')以上是"Tensorflow如何加载变量名和变量值"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
文件
变量
量值
内容
函数
数据
卷积
权重
篇文章
代码
常量
损失
网络
交叉
学习
帮助
训练
输入
下标
二层
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技园
互联网科技工作委员会副主任毛军
中国互联网科技工作委员会毛军
互联网科技开发公司
西安互联网科技
智网互联网科技
互联网科技公司电话
紫鲸互联网科技
互联网金融科技委员会
蓝色互联网科技
中化能源互联网科技招聘
佳云科技和互联网广告
洛阳昕诺飞互联网科技有限公司
互联网科技大奖都有哪些公司
佛山市拉法互联网科技有限公司
互联网科技如何创业
上海互联网科技公司ppt
互联网科技接地气
互联网的黑科技实验室
利用互联网等科技手段
深圳市人人互联网科技有限公司
互联网科技公司怎么样
奇酷互联网科技公司
互联网科技ppt模板
宁夏众和广鑫互联网科技有限公司
彤创互联网科技有限公司
昊天互联网科技有限公司
高科技互联网套路
深圳互联网科技园地址
互联网科技创业计划的风险分析