sys.argv 是一个列表,存储的是程序调用的参数,sys.argv[0]是程序本身的名字
比如保存一个hello.py的文件
文件内容为
在命令行中运行 python hello.py 1 2
输出结果为
===================================================================================
在tensorflow的例程中有一句
FLAGS = tf.app.flags.FLAGS; FLAG变量与tf.app.flags.DEFINE_string()函数。总结起来的话,tf.app.flags.DEFINE_string()函数就是添加命令行的optional argument(可选参数),而tf.app.flags.FLAGS可以从对应的命令行参数取出参数。与argparse相似
https://blog.csdn.net/m0_37041325/article/details/77448971
=================================================================================
TensorBoard
==================================================================================
tf.summary
https://www.2cto.com/kf/201805/746214.html
=================================================================================
在tensorflow中经常在代码最后出现
if __name__ == "__main__":
tf.app.run()
tf.app.run() 是做什么用的?
答:在代码中定义了
def main(argv=None):
……
tf.app.run()的作用是让代码从main函数开始运行
=====================================================================================
tf.matmul()函数
矩阵相乘。比如 a的shape是[2,3],b的shape是[3,2],相乘c=tf.matmul(a,b), c的shape是[2,2]
与np.matmul类似。如果是元素点乘,则用* 或者np.multiply
======================================================================================
tensorflow中为什么要创建会话 session?
举个例子
直接打出c,并没有给出c的具体数据
只有创建session会话并运行
才会输出c
那么tf.Session()和tf.InteractiveSession()的区别是什么呢?
sess=tf.InteractiveSession()默认该sess就是当前运行的会话,在使用run()和eval()函数的时候不需要指明运行哪个会话。
比如
import tensorflow as tf
import numpy as np
a=tf.constant([[1., 2., 3.],[4., 5., 6.]])
b=np.float32(np.random.randn(3,2))
c=tf.matmul(a,b)
init=tf.global_variables_initializer()
sess=tf.Session()
print (c.eval())
这段程序就会报错,因为c没有指明是用哪个session,但是如果把sess=tf.Session()改成sess=tf.InteractiveSession()就不会报错。
https://www.cnblogs.com/cvtoEyes/p/9035047.html
=============================================================================
变量初始化
# Build an initialization operation to run below.
init = tf.initialize_all_variables()
# Start running operations on the Graph.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=False))
sess.run(init)
这一段是变量的初始化,变量的初始化必须找模型的其他操作之前,而且必须显示的运行。最简单的方式是添加一个节点用于初始化所有的变量,然后在使用模型之前运行这个节点。 使用tf.initialize_all_variables()(以后更名为tf.global_variables_initializer())添加节点用于初始化所有的变量。在构建完整个模型并在会话中加载模型后,运行这个节点。
模型保存和加载
saver = tf.train.Saver(tf.all_variables()) #创建一个saver用于保存和读取model。它的构造器将在计算图上添加save和restore节点,针对图上所有或者指定的变量。saver对象提供了运行这些节点的方法,只要指定用于读写的checkpoint的文件。
# 创建一些变量
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")
...
# 添加用于初始化变量的节点
init_op = tf.global_variables_initializer()
# 添加用于保存和加载所有变量的节点
saver = tf.train.Saver()
# 然后,加载模型,初始化所有变量,完成一些操作后,把变量保存到磁盘上
with tf.Session() as sess:
sess.run(init_op)
# 进行一些操作
..
# 将变量保存到磁盘上
save_path = saver.save(sess, "/tmp/model.ckpt")
print("Model saved in file: %s" % save_path)
一个快速找到ckpt文件的方法:
ckpt=tf.train.get_checkpoint_state(ckpt_dir)
if ckpt and ckpt.model_checkpoint_path:
saver.restore(sess, ckpt.model_checkpoint_path)
参考资料:https://blog.csdn.net/u012436149/article/details/56665612
===================================================================================
labels = tf.cast(labels, tf.int64)
#tf.cast函数将label转换为tf.int64格式
tf.argmax(vector,1)
返回的是vector中的最大值的索引号,如果vector是一个向量,那就返回一个值,如果是一个矩阵,那就返回一个向量,这个向量的每一个维度都是相对应矩阵行的最大值元素的索引号
tf.equal(vector1, vector2)
按元素判断两个vector是否相等,相等为True,不等为False
比如
import tensorflow as tf
a = [[1,2,3],[4,5,6]]
b = [[1,0,3],[1,5,1]]
with tf.Session() as sess:
print(sess.run(tf.equal(a,b)))
输出是
[[ True False True]
[False True False]]
============================================================================
Tensorflow中对Session中多线程的管理的两个类:tf.Coordinator和 tf.QueueRunner
=============================================================================
tf.nn.in_top_k
top_k_op = tf.nn.in_top_k(logits, labels, 1)
https://blog.csdn.net/uestc_c2_403/article/details/73187915
用于判断logits中最大元素的索引与labels是否一致
============================================================================
tf.train.ExponentialMovingAverage
滑动平均模型
在采用随机梯度下降算法训练神经网络时候,使用滑动平均模型可以在一定的程度上提高最终的模型在测试数据上的表现