TensorFlow学习笔记

1、图的相关操作

  1.1默认图
       - 访问方法:tf.get_default_graph()
       - 查看属性:.graph   (op、sess都含有graph属性)
  1.2创建图
       #自定义图
       new_g = tf.Graph()

       #在图中定义数据和操作
       with new_g.as_default():
       		具体的操作...
       
       #开启会话
       with tf.Session(graph=new_g) as new_sess:
       		具体操作...

2、TensorBoard:可视化学习

#数据序列化-events文件
tf.summary.FileWriter(path,graph =    )

#启动TensorBoard
在终端输入 tensorboard    --logdir=path
在浏览器中打开图页面127.0.0.1:6006

3、OP

3.1 指令名称

	一个图一个命名空间
	a = tf.constant(3.0, name="a")

4、会话(2.0没有了)

4.1 会话的两种创建方式:

 - tf.Session:用于完整的程序当中
 - tf.InteractiveSession:用于交互式上下文中的TensorFlow

4.2 会话里查看张量的值:

.eval()

4.3 初始化会话的参数:

target=‘’,graph=None, config=None

4.4 开启会话:

with tf.Session() as sess:
	具体操作...

4.5 会话的run:

 - session.run(fetches,feed_dict=None,options=None,run_metadata=None)

4.6 feed操作

placeholder提供占位符,run时候通过feed_dict制定参数
 - 定义占位符(相当于提前声明)
 a = tf.placeholder(tf.float32)

5、张量(Tensor)

- 标量:一个数字							0阶张量
- 向量:一维数组 [1,2,3,4]			1阶张量
- 矩阵:二维数组 [ [1,2,3,4],		2阶张量
				  [1,2,3,4]]
- 张量:n维数组							n阶张量

5.1 张量的类型

tf.int32; tf.float32; tf.float64等

5.2 张量的阶

 - 0阶张量:纯量,只有大小
 - 1阶张量:向量,有大小和方向
 - 2阶张量:矩阵,数据表
 - 3阶张量:数据立体

5.3 创建张量

创建张量时若不指定类型,则默认为tf.float32,整型默认为tf.int32,浮点型默认为tf.float32

 1. 固定值
 	- 所有元素为0:tf.zeros(shape=[3,4],dype=tf.float32,name=None)
 				  tf.zeros_like(tensor1,dype=tf.float32,name=None)
 	- 所有元素为1:tf.ones(shape=[3,4],dype=tf.float32,name=None)
 				  tf.ones_like(tensor1,dype=tf.float32,name=None)
 	- 元素为标量值
 				  tf.constant(value,dype=None,shape=None,name='Const')

 2. 随机值
 	tf.random(shape=[3,4],mean=0.0,stddev=1.0,dype=tf.float32,seed=None,name=None)

5.4 张量的变换

1. 类型改变:
- tf.string_to_number(string_tensor, out_type=None, name=None)

- tf.to_double(tensor, name='ToDouble')
- tf.to_float(tensor, name='ToFloat')
- tf.to_int32(tensor, name='ToInt32')

- tf.cast(tensor,dtype, name=None)   不改变原始的张量,会返回新的张量

2. 形状改变:
 - 形态形状:初始创建张量时的形状
 		只有在形状没有完全固定下来的时候才能通过tensor.set_shape()改变
 		形状未固定的例子:a = tf.placeholder(dtype=tf.float32,shape=[None,None])
 
 - 动态形状:tensor.reshape(tensor,shape), 要保证前后元素的数量一样;不改变原始的张量,会返回新的张量

5.5 张量的数学运算

看官网介绍

6、变量OP

特点:存储持久化
	  可修改值
	  可指定被训练
适合保存模型参数

6.1 创建变量

tf.Variable.init(initial_value, trainable=True, collections=None, validate_shape=True, name=None))

例:a = tf.Variable.init(initial_value=30),30是初始化值,还需要对变量初始化
    init = tf.global_variables_initializer()
    在会话里运行sess.run(init)

6.2 修改变量命名空间

使用tf.variable_scope
with tf.variable_scope("my_scope"):
	a = tf.Variable.init(initial_value=30)

7、高级API

7.1 其他基础API

tf.app
tf.image
tf.gfile
tf.summary
tf.python_io
tf.train
tf.nn

7.2 高级API

tf.keras
tf.layers
tf.estimator
tf.contrib

8、增加其他功能

8.1 增加变量显示

1.收集变量
	 - tf.summary.scalar(name=' ',tensor)  收集单值变量,name为名字,tensor为值
	 - tf.summary.histogram(name=' ',tensor)  收集高纬度的变量参数
	 - tf.summary.image(name=' ',tensor)  收集输入的图片张量
2.合并写入事件中
	 - merged = tf.summary.merage_all()
	 - 运行合并:summary = sess.run(merged),每次迭代都要运行
	 - 添加FileWriter.add_summary.image(summary,i)  表示第几次值
def linear_regression():
	//1)准备数据
	x = tf.random_normal(shape=[100,1])
	y_true = tf.matmul(x,[[0.8]])+0.7

	//2)构建模型
	weights =  tf.Variable.init(initial_value=tf.random_normal(shape = [1,1]))
	bias =  tf.Variable.init(initial_value=tf.random_normal(shape = [1,1]))
	y_predict = tf.matmul(x,weights)+bias

	//3)构造损失函数
	error = tf.reduce_mean(tf.square(y_predict-y_true))

	//4)优化损失
	optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.07).minimize(error)

	//显式初始化变量
	init = tf.global_variables_initializer()

	//2 收集变量
	tf.summary.scalar("error",error) 
	tf.summary.histogram("weights",weights)
	tf.summary.histogram("bias",bias)

	//合并变量
	merged = tf.summary.merage_all()


	//开启会话
	with tf.Session as sess:
		sess.run(init)

		//1 创建事件文件
		file_writer = tf.summary.FileWriter("./tmp/linear",graph = sess.graph)

		print("训练前参数为:权重%f,偏置%f,损失%f" % (weights.eval(),bias.eval(),error.eval()))

		//训练
		for i in range(100):
			sess.run(optimizer)
			print("第%d次训练后参数为:权重%f,偏置%f,损失%f" % (i+1,weights.eval(),bias.eval(),error.eval()))

			//3 运行合并变量操作
			summary = sess.run(merged)
			//4 将每次迭代后的变量写入事件文件
			filew_riter.add_summary.image(summary,i) 


	return None

8.2 增加命名空间

def linear_regression():
   with tf.variable_scope("prepare_data"):
   		//1)准备数据
   		x = tf.random_normal(shape=[100,1],name = "Features")
   		y_true = tf.matmul(x,[[0.8]])+0.7

   with tf.variable_scope("create_model"):
   		//2)构建模型
   		weights =  tf.Variable.init(initial_value=tf.random_normal(shape = [1,1]),name = "Weights")
   		bias =  tf.Variable.init(initial_value=tf.random_normal(shape = [1,1]),name = "Bias")
   		y_predict = tf.matmul(x,weights)+bias


   with tf.variable_scope("loss_function"):
   		//3)构造损失函数
   		error = tf.reduce_mean(tf.square(y_predict-y_true))

   with tf.variable_scope("optimizer"):
   		//4)优化损失
   		optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.07).minimize(error)

   //显式初始化变量
   init = tf.global_variables_initializer()

   //2 收集变量
   tf.summary.scalar("error",error) 
   tf.summary.histogram("weights",weights)
   tf.summary.histogram("bias",bias)

   //合并变量
   merged = tf.summary.merage_all()


   //开启会话
   with tf.Session as sess:
   	sess.run(init)

   	//1 创建事件文件
   	file_writer = tf.summary.FileWriter("./tmp/linear",graph = sess.graph)

   	print("训练前参数为:权重%f,偏置%f,损失%f" % (weights.eval(),bias.eval(),error.eval()))

   	//训练
   	for i in range(100):
   		sess.run(optimizer)
   		print("第%d次训练后参数为:权重%f,偏置%f,损失%f" % (i+1,weights.eval(),bias.eval(),error.eval()))

   		//3 运行合并变量操作
   		summary = sess.run(merged)
   		//4 将每次迭代后的变量写入事件文件
   		filew_riter.add_summary.image(summary,i) 


   return None

8.3 模型保存和加载

1、保存
tf.train.saver(var_list=None,max_to_keep=5)

 - var_list:指定要保存和还原的变量
 - max_to_keep:指示要保留的最近检查点文件的数量

2、加载模型
checkpoint = tf.train.latest_checkpoint(path)
saver.restore(sess,checkpoint)
 
 例子:
 //实例化
 saver = tf.train.saver(var_list=None,max_to_keep=5)

 //保存
 saver.save(sess,"./tmp/model/my_linear.ckpt"),path里包括模型的名字,名字的后缀是.ckpt;路径里的文件夹必须是已经存在的

 //加载
 if os.path.exists("./tmp/model/checkpoint"):
	 saver.restore(sess,"./tmp/model/my_linear.ckpt")

8.4 命令行参数的使用

//例子:
//1 定义命令行参数
tf.app.flags.DEFINE_integer("max_step",100,"模型的训练步数")
tf.app.flags.DEFINE_string("model_dir",Unkonwn,"模型保存的路径+名字")

//2 简化变量名
FLAGS = tf.app.flags.FLAGS

//3 输出
print("max_step:\n",FLAGS.max_step)
print("model_dir:\n",FLAGS.model_dir)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值