深度学习 tensorflow 计算图,会话,张量
1. 计算模型---计算图:
tensorflow是一个通过计算图的形式来表示计算的编程系统,每一个计算都是计算图上的一个节点,节点之间的边描述计算之间的依赖关系。所以计算过程一般分为两个步骤:
1.定义计算图
2.执行计算
tf.Graph函数支持生成新的计算图,不同计算图上的张量和运算都不会共享:
import tensorflow as tfgraph_1 = tf.Graph() # 生成一个图
with graph_1.as_default():# 在图1中定义变量并且初始化v = tf.get_variable(name='v', initializer=tf.zeros_initializer(), shape=[1])graph_2 = tf.Graph() # 生成一个图
with graph_2.as_default():v = tf.get_variable(name='v', initializer=tf.ones_initializer(), shape=[1])# 在graph_1中读取变量值
with tf.Session(graph=graph_1) as sess: # 计算图1中tf.global_variables_initializer().run()with tf.variable_scope("", reuse=True):print(sess.run(tf.get_variable('v')))# 在graph_1中读取变量值
with tf.Session(graph=graph_2) as sess: # 计算图1中tf.global_variables_initializer().run()with tf.variable_scope("", reuse=True):print(sess.run(tf.get_variable('v')))
计算图可以用来隔离张量和计算。还可以指定运行图中计算的设备;
with graph_1.device('/gpu:0'):res = a + b
在计算图中,可以通过不同的集合来管理里资源,tf.add_to_collection()函数可以将不同的资源加入到不同的集合中进行管理。tensorflow自动管理了一些集合:
1. Variables , 所有变量,持久化模型
2. Trainable Variable , 可训练的变量
3. Summary 日志相关的变量
4. Queue_runners 处理输入的变量(队列)
5. Moving Average Variables 滑动平均值
2. 数据模型--张量
张量是tensorflow管理数据的形式,但是张量实际上并不是保存的数据,而实如何得到这些数据的计算过程。张量中主要保存了三个属性: 名称(name), 维度(shape), 类型(type)
若果没指定类型,tensorflow会给出默认的类型,但是为了避免潜在的风险(类型不匹配),需要指定类型
int8, int16, int32, int64, uint8
float32, float64
bool
complex64
complex128
3. 运行模型---会话
会话拥有和管理tensorflow程序运行时的所有资源,所有计算完成之后需要关闭会话来帮助系统回收资源。强烈推荐使用python的上下文管理器来使用会话。这样会避免程序因为异常而退出时未关闭会话导致资源泄露。
在tensorflow中可以对会话进行配置 tf.ConfigProto():
graph_1 = tf.Graph() # 生成一个图
with graph_1.as_default():# 在图1中定义变量并且初始化v = tf.get_variable(name='v', initializer=tf.zeros_initializer(), shape=[1])# 对会话进行配置
config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)
# 在graph_1中读取变量值
with tf.Session(graph=graph_1, config=config) as sess: # 计算图1中tf.global_variables_initializer().run()with tf.variable_scope("", reuse=True):print(sess.run(tf.get_variable('v')))
tf.ConfigProto()可以配置并行的线程数,GPU分配此策略,运算超时时间等参数。常用的参数有两个:
allow_soft_placement: 当这个参数为真时:
1. 运算无法在GPU上执行
2. 没有GPU资源
3. 运算输入包含对cpu运算结果的引用。
发生上述中的一种或多种情况,GPU上的运算可以放到CPU上执行。
因为不同GPU驱动版本对计算的支持会略有差别,通过设置这个参数为True,当某些运算无法被GPU执行时,会调整到CPU上,而不是报错。这提高了代码的可移植性。
log_device_placement为True时会记录每个节点被安排在那个设备上,方便调试。
神经网络参数与tensorflow变量:
变量tf.Variable()的作用就是更新和保存神经网络中的参数。
变量的初始化方法:
tf.random_normal 正态分布的随机数 , 参数(mean, std, dtype)
tf.truncated_normal 正态分布,如果随机出来的值如果偏离平均值超过两个标准差,则重新随机 。 参数(mean, std, dtype)
tf.uniform 均匀分布 参数(min, max, dtype)
tf.random_gamma gamma分布 参数(形状alpha, 尺度参数beta, dtype)
tf.zeros , tf.ones, tf.fill全为给定数字, tf.constant
一个前向传播的例子:
import tensorflow as tfgraph_1 = tf.Graph() # 生成一个图
with graph_1.as_default():# 在图1中定义变量并且初始化w1 = tf.Variable(tf.random_normal(shape=[2, 3], stddev=1, dtype=tf.float32, seed=1))w2 = tf.Variable(tf.random_normal(shape=[3, 1], stddev=1, dtype=tf.float32, seed=1))x = tf.constant(value=[[0.7, 0.9]], dtype=tf.float32)# 前行传播a = tf.matmul(x, w1)y = tf.matmul(a, w2)# 对会话进行配置
config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)
# 在graph_1中读取变量值
with tf.Session(graph=graph_1, config=config) as sess: # 计算图1中# sess.run(w1.initializer) # 初始化变量# sess.run(w2.initializer)init_op = tf.global_variables_initializer() # 初始化算有变量 初始化所有变量,这个函数会处理变量之间的依赖关系sess.run(init_op)print(sess.run(y))
反向传播:
在神经网络的优化算法中,最常用的方法是反向传播。反向传播算法的训练神经网络的流程:
placeholder: 相当于在途中定义一个位置,作为训练数据的传入接口:
import tensorflow as tfgraph_1 = tf.Graph() # 生成一个图
with graph_1.as_default():# 在图1中定义变量并且初始化w1 = tf.Variable(tf.random_normal(shape=[2, 3], stddev=1, dtype=tf.float32, seed=1))w2 = tf.Variable(tf.random_normal(shape=[3, 1], stddev=1, dtype=tf.float32, seed=1))x = tf.placeholder(dtype=tf.float32, shape=[None, 2], name='input') # placeholder的行数可以设置为None, 根据具体的传入数据再得到# 前行传播a = tf.matmul(x, w1)y = tf.matmul(a, w2)# 对会话进行配置
config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)
# 在graph_1中读取变量值
with tf.Session(graph=graph_1, config=config) as sess: # 计算图1中# sess.run(w1.initializer) # 初始化变量# sess.run(w2.initializer)init_op = tf.global_variables_initializer() # 初始化算有变量sess.run(init_op)feed_dict = {x: [[0.7, 0.9], [0.1, 0.4], [0.6, 0.8]]}print(sess.run(y, feed_dict=feed_dict))
损失函数:
简单介绍一下损失函数:
在得到一个batch的计算结果后,需要定义一个损失函数来刻画当前的预测值和真实值之间的差距,然后通过优化算法来调整神经网络参数以减小差距。例如定义交叉熵损失函数。
tensorflow常用的三种优化方法:
1. tf.train.GridientDescentOptimizer 梯度下降法
2. tf.train.AdamOptimizer
3. tf.train.MomnteumOptimizer
完整程序:
import tensorflow as tf
from numpy.random import RandomState
import numpy as npgraph_1 = tf.Graph() # 生成一个图
with graph_1.as_default():# 在图1中定义变量并且初始化w1 = tf.Variable(tf.random_normal(shape=[2, 3], stddev=1, dtype=tf.float32, seed=1))w2 = tf.Variable(tf.random_normal(shape=[3, 1], stddev=1, dtype=tf.float32, seed=1))x = tf.placeholder(dtype=tf.float32, shape=[None, 2], name='x-input') # placeholder的行数可以设置为None, 根据具体的传入数据再得到y_ = tf.placeholder(dtype=tf.float32, shape=[None, 1], name='y-input')# 前行传播a = tf.matmul(x, w1)y = tf.matmul(a, w2)# 定义损失函数和反向传播y = tf.sigmoid(y)cross_entropy = -tf.reduce_mean(y_*tf.log(tf.clip_by_value(y, 1e-10, 1))) + (1-y)*tf.log(tf.clip_by_value(1-y, 1e-10, 1.0))# 通过clip_value(x, x_min. x_max)可以将x限制在合理的范围内train_step = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cross_entropy) # 定义损失函数if __name__ == "__main__":batch_size = 8rdm = RandomState(1)data_size = 128X = rdm.rand(data_size, 2) # 训练数据Y = [int(x1+x2 < 1) for(x1, x2) in X]Y = np.array(Y) print(type(X))print(type(Y))# 对会话进行配置config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=False)# 在graph_1中读取变量值with tf.Session(graph=graph_1, config=config) as sess: # 计算图1中init_op = tf.global_variables_initializer() # 初始化算有变量sess.run(init_op)print("训练前的权值")print(sess.run(w1))print(sess.run(w2))steps = 1000for i in range(steps):start = (i * batch_size) % data_sizeend = min(start + batch_size, data_size)sess.run(train_step, feed_dict={x: X[start: end], y_: Y[start: end].reshape([-1, 1])})# 每隔一段时间计算在所有数据上的交叉熵if i % 50 == 0:cross_entropy_value = sess.run(cross_entropy, feed_dict={x: X, y_: Y.reshape([-1, 1])})print("The loss is {}".format(cross_entropy_value))print("训练后的权值")print(sess.run(w1))print(sess.run(w2))
深度学习 tensorflow 计算图,会话,张量相关推荐
- 深度学习tensorflow框架的张量
#-*-coding:utf-8-*- import tensorflow as tf #默认不进行转化 a=tf.constant(3.0,dtype=tf.float32) c=tf.consta ...
- 浅淡深度学习的发机机——张量计算
浅淡深度学习的发机机--张量计算 张量计算是个看似陌生,实际上很常用的事物,它包括图形渲染的透明度混合.图像处理的滤镜.数学计算中的矩阵乘法.卷积等等,是图形引擎.图像算法.机器学习以及深度学习的基础 ...
- 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(八)(TensorFlow基础))
[神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(八)(TensorFlow基础)) 8 TensorFlow基础 8.1 TensorFlow2.0特性 8.1.1 Tenso ...
- 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(十二)(人工神经网络(1)))
[神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(十二)(人工神经网络(1))) 12 人工神经网络(1) 12.1 神经元与感知机 12.1.1 感知机 12.1.2 Delt ...
- 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(十四)(卷积神经网络))
[神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(十四)(卷积神经网络)) 14 卷积神经网络 14.1 深度学习基础 14.1.1 深度学习的基本思想 14.1.2 深度学习三 ...
- 使用深度学习TensorFlow框架进行图片识别
Apsara Clouder大数据专项技能认证:使用深度学习TensorFlow框架进行图片识别 本认证系统的介绍了深度学习的一些基础知识,以及Tensorflow的工作原理.通过阿里云机器学习PAI ...
- 百度云-深度学习tensorflow搭建
百度云上部署Tensorflow进行模型训练 上半年就了解过百度云但是还是tf1.0版本的,而谷歌3月份的升级到1.2改动挺大的,百度云上更新滞后,所以尽管有tf平台,版本落后每小时付费还是有点小贵, ...
- 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(四)(Python语言基础(2))
[神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(四)(Python语言基础(2)) 第4讲 Python语言基础(2) 4.1 内置数据结构 4.1.1 序列数据结构(sequ ...
- 通过深度学习+TensorFlow.js对蒙娜丽莎进行动画处理
看蒙娜丽莎(Mona Lisa)画像时,你会发现她的眼睛将四处移动跟随你.这就是所谓的"蒙娜丽莎效应".为了娱乐,我们把蒙拉丽莎画像制成交互式数字肖像,通过你的浏览器和网络摄像头将 ...
最新文章
- java中ArrayList
- 设置窗口大小后无法滚动_新款奥迪A6L更换变速器机电单元后无法完成油冷却阀基本设置...
- just函数 python_在python里写Monad
- cygwin 编译 android vlc,Cygwin 编译 VLC 问题
- 1.6 编程基础之一维数组 03 计算书费 python
- CppUnit源代码分析总结
- Python程序设计学习笔记-语句与格式化输出
- java 数字 下划线_数字文字中的下划线– Java 7功能
- from .import xxx什么意思
- chromedriver 与 chrome 版本对照表
- TP-LINK-TL-WR703N刷Breed用Openwrt固件挂MP288打印机服务共享手机打印服务
- Java练习题之循环输出数字图形。例如1 22 333 4444 55555每输出一种数字换行。
- cdh6.3安装以及整合spark2、flink1.9
- 浅析Saas、PaaS、laas、Caas、Daas服务理解总结
- 服务器inetpub是什么文件夹,处理inetpub文件夹在win10中的问题
- vue3 +vite+ts实战项目添加 eslint + prettier + lint-staged 踩坑指南
- bzoj 1062: [NOI2008]糖果雨
- 演出经纪人考试大纲、演出经纪人考试资料是什么?
- 12306 抢票,极限并发带来的思考
- 【日常】如何处理“火星文”乱码
热门文章
- 持续集成部署Jenkins工作笔记0021---21.关闭防止跨站点请求伪造
- STM32工作笔记0016---MDK开发环境安装
- SpringCloud学习笔记022---SpringBoot中集成使用MongoDb进行增删改查
- 调试 acf 的时候发现问题
- JAVA的节点流和处理流
- 结束占用端口号进程(pid)
- zblog php伪静态,zblogphp如何设置伪静态
- java中criteria类_java – Criteria API:按类类型过滤
- 计算机二级C选择题精华
- java aop管理权限_基于spring aop 权限管理系统原型 - andyj2ee - BlogJava