深度学习TensorFlow框架
深度学习介绍
深度学习和机器学习区别
机器有人工参与,而深度学习是靠网络;
深度学习需要大量的数据集,训练神经网络需要大量的算力
机器学习有:朴素贝叶斯,决策树等
深度学习主要是神经网络
深度学习应用场景
CV:物体识别,场景识别,车型认识,人脸检测跟踪,人脸关键点跟踪,人脸身份认证
NPL:机器翻译 文本识别 聊天对话
语音技术:语音识别
TensorFlow框架的使用
结构
各个组件
图
什么是图结构
图结构就是数据(Tensor)加操作(operation)
2 图相关操作
new_g = tf.Graph()
with new_g.as_default();
用TensorBoard:可视化学习
1.
2启动
OP
操作函数
tf.constant(Tensor对象) Const
tf.add(Tensor1,Tensor2) Add对象
指令名称
会话
开启会话的俩种方式:
# tf.Session:用于完整的程序当中 # tf.InteractiveSession:用于交互式上下文中的TensorFlow ,例如shell # 1)会话掌握资源,用完要回收 - 上下文管理器 # 2)初始化会话对象时的参数 # graph=None # target:如果将此参数留空(默认设置), # 会话将仅使用本地计算机中的设备。 # 可以指定 grpc:// 网址,以便指定 TensorFlow 服务器的地址, # 这使得会话可以访问该服务器控制的计算机上的所有设备。 # config:此参数允许您指定一个 tf.ConfigProto # 以便控制会话的行为。例如,ConfigProto协议用于打印设备使用信息 # 3)run(fetches,feed_dict=None) # 3 feed操作 # a = tf.placeholder(tf.float32, shape=) # b = tf.placeholder(tf.float32, shape=)
张量
两个属性:type 和shape
# 张量Tensor # print() # ndarray # 张量值的类型 当在会话中返回的类型 # 2.4.1 张量(Tensor) # 张量 在计算机当中如何存储? # 标量 一个数字 0阶张量 # 向量 一维数组 [2, 3, 4] 1阶张量 # 矩阵 二维数组 [[2, 3, 4], 2阶张量 # [2, 3, 4]] # …… # 张量 n维数组 n阶张量 # 1 张量的类型 # 2 张量的阶 # 创建张量的时候,如果不指定类型 # 默认 tf.float32 # 整型 tf.int32 # 浮点型 tf.float32
# 张量(Tensor) # 张量 在计算机当中如何存储? # 标量 一个数字 0阶张量 # 向量 一维数组 [2, 3, 4] 1阶张量 # 矩阵 二维数组 [[2, 3, 4], 2阶张量 # [2, 3, 4]] # …… # 张量 n维数组 n阶张量 # 1 张量的类型 # 2 张量的阶 # 创建张量的时候,如果不指定类型 # 默认 tf.float32 # 整型 tf.int32 # 浮点型 tf.float32 # 2.4.2 创建张量的指令 # 2.4.3 张量的变换 # ndarray属性的修改 # 类型的修改 # 1)ndarray.astype(type) # tf.cast(tensor, dtype) # 不会改变原始的tensor # 返回新的改变类型后的tensor # 2)ndarray.tostring() # 形状的修改 # 1)ndarray.reshape(shape) # -1 自动计算形状 # 2)ndarray.resize(shape) # 静态形状 - 初始创建张量时的形状 # 1)如何改变静态形状 # 什么情况下才可以改变/更新静态形状? # 只有在形状没有完全固定下来的情况下 # tensor.set_shape(shape) # 2)如何改变动态形状 # tf.reshape(tensor, shape) # 不会改变原始的tensor # 返回新的改变形状后的tensor # 动态创建新张量时,张量的元素个数必须匹配
变量
创建变量
def variable_demo():
"""
变量的演示
:return:
"""
# 创建变量
with tf.variable_scope("my_scope"):
a = tf.Variable(initial_value=50)
b = tf.Variable(initial_value=40)
with tf.variable_scope("your_scope"):
c = tf.add(a, b)
print("a:\n", a)
print("b:\n", b)
print("c:\n", c)
# 初始化变量
init = tf.global_variables_initializer()
# 开启会话
with tf.Session() as sess:
# 运行初始化
sess.run(init)
a_value, b_value, c_value = sess.run([a, b, c])
print("a_value:\n", a_value)
print("b_value:\n", b_value)
print("c_value:\n", c_value)
return None
# TensorFlow - 变量 # 存储模型参数 # 1 创建变量 # 变量需要显式初始化,才能运行值 # 2 使用tf.variable_scope()修改变量的命名空间 # 使得结构更加清晰
API
通过TensorFlow官方文档去看
线性回归案例(用TensorFlow)
7.1 线性回归原理复习 1)构建模型 y = w1x1 + w2x2 + …… + wnxn + b 2)构造损失函数 均方误差 3)优化损失 梯度下降 7.2 案例:实现线性回归的训练 准备真实数据 100样本 x 特征值 形状 (100, 1) y_true 目标值 (100, 1) y_true = 0.8x + 0.7 假定x 和 y 之间的关系 满足 y = kx + b k ≈ 0.8 b ≈ 0.7 流程分析: (100, 1) * (1, 1) = (100, 1) y_predict = x * weights(1, 1) + bias(1, 1) 1)构建模型 y_predict = tf.matmul(x, weights) + bias 2)构造损失函数 error = tf.reduce_mean(tf.square(y_predict - y_true)) 3)优化损失 optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error) 5 学习率的设置、步数的设置与梯度爆炸 7.3 增加其他功能 1 增加变量显示 1)创建事件文件 2)收集变量 3)合并变量 4)每次迭代运行一次合并变量 5)每次迭代将summary对象写入事件文件 2 增加命名空间 3 模型的保存与加载 saver = tf.train.Saver(var_list=None,max_to_keep=5) 1)实例化Saver 2)保存 saver.save(sess, path) 3)加载 saver.restore(sess, path) 4 命令行参数使用 1)tf.app.flags tf.app.flags.DEFINE_integer("max_step", 0, "训练模型的步数") tf.app.flags.DEFINE_string("model_dir", " ", "模型保存的路径+模型名字") 2)FLAGS = tf.app.flags.FLAGS 通过FLAGS.max_step调用命令行中传过来的参数 3、通过tf.app.run()启动main(argv)函数
总结