tf.Graph() 表示实例化了一个类,一个用于 tensorflow 计算和表示用的数据流图,通俗来讲就是:在代码中添加的操作(画中的结点)和数据(画中的线条)都是画在纸上的“画”,而图就是呈现这些画的纸,你可以利用很多线程生成很多张图,但是默认图就只有一张。
tf.Graph().as_default() 表示将这个类实例,也就是新生成的图作为整个 tensorflow 运行环境的默认图,如果只有一个主线程不写也没有关系,tensorflow 里面已经存好了一张默认图,可以使用tf.get_default_graph() 来调用(显示这张默认纸),当你有多个线程就可以创造多个tf.Graph(),就是你可以有一个画图本,有很多张图纸,这时候就会有一个默认图的概念了。
import tensorflow as tf
c=tf.constant(4.0)
assert c.graph is tf.get_default_graph() #看看主程序中新建的一个变量是不是在默认图里
g=tf.Graph()
with g.as_default():
c=tf.constant(30.0)
assert c.graph is g
不报错就是对的
tf.ConfigProto配置tf.session()的运行环境,比如cpu or gpu,多线程的线程数;
os.putenv( 'CUDA_VISIBLE_DEVICES', FLAGS.gpuid )
tfconfig = tf.ConfigProto()
tfconfig.gpu_options.allow_growth = True # 运行环境设置为gpu
sess = tf.Session(config=tfconfig)
tf.tile(a,b), a是输入,b是a维度的张量,比如a是3维,则a为1*3的一维张量,其作用是在每个维度扩展对应b中的倍数;
a = tf.constant([[1, 2], [3, 4], [5, 6]], dtype=tf.float32)
a1 = tf.tile(a, [2, 3])
with tf.Session() as sess:
print(sess.run(a))
print(sess.run(a1))
array([[1., 2.],
[3., 4.],
[5., 6.]], dtype=float32)
array([[1., 2., 1., 2., 1., 2.],
[3., 4., 3., 4., 3., 4.],
[5., 6., 5., 6., 5., 6.],
[1., 2., 1., 2., 1., 2.],
[3., 4., 3., 4., 3., 4.],
[5., 6., 5., 6., 5., 6.]], dtype=float32)
saver = tf.train.Saver()
saver.save(sess, '/Path/to/Save/ckpt')
# 这会保存几个文件, checkpoint 、.ckpt.meta、.ckpt-data-00000-of-00001 【字典的形式】、mnist_fakequantize.ckpt.index
tf.train.write_graph(sess.graph_def, '/path/to/Mnist/Mnist_train/', 'mnist_fakequantize.pbtxt', True)
# 这会保存 .pbtxt文件
# 使用meta和data加载图的样例,可用于继续训练或测试数据;
saver = tr.train.import_meta_graph('/path/to/ckpt.meta')
saver.restore(sess, /path/to/.ckpt_data)
如果没有 .ckpt 或 .ckpt.data 文件,可以使用tf.train.latest_checkpoint()
来获取最后一次保存的模型;
model_file=tf.train.last_checkpoint(save_path)
saver.restore(sess,model_file)