TensorFlow初学
TensorFlow初学
基本概念
1.激活函数和成本函数
激活函数(activation function):一般是非线性函数,就是每个神经元通过这个函数将原有的来自其他神经的输入做一个非线性变化,输出给下一层神经元。激活函数实现的非线性能力是前向传播很重要的一部分。
成本函数(cost function):损失值越小,结果越可靠。
2.有监督学习和无监督学习
有监督学习:训练数据有标记的学习。
无监督学习:有两种思路:一种是聚类,另一种是在成功时采用某种形式的激励制度,即强化学习。
此外还有半监督学习,其训练数据有一部分有标记,有一部分没有,有标记数据的标记不是确定的。
3.TensorFlow
TensorFlow支持卷积神经网络CNN和循环神经网络RNN,以及RNN的一个特例长短期记忆网络LSTM.
(1)环境配置(略)
(2)运行示例
 import tensorflow as tf
 hello=tf.constant('Hello')
 sess=tf.Session()
 print( sess.run(hello) )`
sess=tf.Session()
a=tf.constant(10)
b=tf.constant(22)
print(sess.run(a+b))
(3)可视化TensorFlow(略)
(4)TensorFlow基础知识
TensorFlow的编程理念
编程模式通常分为命令式编程和符号式编程。
符号式编程一般是先定义各种变量,然后建立一个数据流图,在数据流图中规定各个变量之间的计算关系,最后需要对数据流图进行编译,但此时的数据流图还是一个空壳,里面没有任何实际数据,只有把需要运算的输入放进去后,才能使整个模型中形成数据流,从而形成输出值。
如以下定义了一个操作,但是实际上并没有运行:
import tensorflow as tf
t=tf.add(8,9)
print(t)
Tensor("Add:0", shape=(), dtype=int32)
import tensorflow as tf
#创建图
a=tf.constant([1.0,2.0])
b=tf.constant([3.0,4.0])
c=a*b
#创建会话
sess=tf.Session()
#计算c
print(sess.run(c))
sess.close()
[ 3. 8.]
TensorFlow的编程模型
(具体可以参考https://www.sogou.com/link?url=DOb0bgH2eKh1ibpaMGjuy9T9X2Sf41yxhqGP_cUGwmZUu-0gQ4GHCibc-iPH6wf8pQcrxo3DZGxbd4MaiShHcg..)
下图讲述了其运行原理。图中包括输入(input)、塑形(reshape)、Relu层(隐藏层)、Logit层(输出层)、Softmax(计算输出结果中各个类别的概率分布)、交叉熵(cross entropy,度量两个概率分布,即原样本的概率分布和输出结果的概率分布之间的相似性)、梯度(gradient)、SGD训练(SGD Trainer,反向传播过程,依次更新,即bsm,Wsm,bh1,Wh1)等部分,是一个简单的回归模型。(code实现:https://blog.csdn.net/blwinner/article/details/81252344)
TensorFlow是指张量的流动,其数据流图是由节点(node)和边(edge)组成的有向无环图(directed acycline graph,DAG).
TensorFlow由tensor和flow两部分组成,tensor代表了数据流图中的边,而flow代表了数据流图中节点所做的操作。
- 边
TensoFlow的边有两种连接关系:数据依赖和控制依赖。其中实线边表示数据依赖,代表数据,即张量。任意维度的数据统称为张量。在机器学习算法中,张量在数据流图中从前往后流动一遍就完成了一次前向传播,而残差从后向前流动一次就完成了一次反向传播。 
还有一种特殊的边,一般为虚线边,称为控制依赖,用于控制操作的运行,来确保happens-before关系,这类边上没有数据流过,但是源节点必须在目的节点开始执行前完成执行。
执行代码:tf.Graph.control_dependencies(control_inputs)
- 节点
 
图中的节点又称为算子,它代表一个操作(option,OP),一般用来表示施加的数学运算,也可以表示数据输入(feed in)的起点以及输出(push out)的终点,或者是I/O持久变量的终点。
算子支持表:
- 图
把操作任务描述成有向无环图。构建图的第一步是创建各个节点: 
#创建一个常量运算操作,产生一个1*2矩阵
matrix1=tf.constant([[3.,3.]])
#创建另外一个常量运算操作,产生一个2*1矩阵
matrix2=tf.constant([[2.],[2.]])
#创建一个矩阵乘法运算,把matrix1和matrix2作为输入
#返回值product代表矩阵乘法的结果
product=tf.matmul(matrix1,matrix2)
print(product)
- 会话
启动图的第一步是创建一个Session对象。
在调用Session对象的run()方法来执行图时,传入一些tensor,这个过程叫做填充(feed),返回的结果类型根据输入的类型而定,这个过程叫取回(fetch). 
会话主要有两个API接口:Extend和Run。Extend操作是在Graph中添加节点和边,Run操作是输入计算的节点和填充必要的数据后,进行运算并输出运算结果。
- 设备
GPU、CPU.
TensorFlow可以明确指定操作在哪个设备上执行: 
with tf.Session() as sess:
    #指定在第二个gpu上运行
  with tf.device("/gpu:1"):
      matrix1 = tf.constant([[3., 3.]])
      matrix2 = tf.constant([[2.], [2.]])
      product = tf.matmul(matrix1, matrix2)
- 变量
变量是一种特殊的数据,在图中有固定的位置。 
创建一个变量张量,使用tf.Variable()构造函数,这个构造函数需要一个初始值,初始值的形状和类型决定了这个变量的形状和类型:
#创建一个变量,初始化变量为标量0
state=tf.Variable(0,name="counter")
#创建一个常量张量
input1=tf.constant(3.0)
TensorFlow还提供了填充机制,可以在构建图时使用tf.placeholder()临时替代任意操作的张量,在调用Session对象的run()方法去执行图时,使用填充数据作为调用的参数,调用结束后,填充数据就消失。
input1=tf.placeholder(tf.float32)
input2=tf.placeholder(tf.float32)
output=tf.mul(input1,input2)
with tf.Session() as sess:
    print(sess.run([output],feed_dict={input1:[7.],input2:[2.]}))
- 内核
TF中还有一个概念是kernel,kernel是operation在某种设备上的具体实现。TF的库通过注册机制来定义op和kernel,所以可以通过链接一个其他的库来进行kernel和op的扩展。 
TensorFlow初学的更多相关文章
- TensorFlow初学教程(完整版)
		
1:你想要学习TensorFlow,首先你得安装Tensorflow,在你学习的时候你最好懂以下的知识: a:怎么用python编程: b:了解一些关于数组的知识: c:最理想的 ...
 - 全方面讲解TensorFlow
		
任何曾经试图在 Python 中只利用 NumPy 编写神经网络代码的人都知道那是多么麻烦.编写一个简单的一层前馈网络的代码尚且需要 40 多行代码,当增加层数时,编写代码将会更加困难,执行时间也会更 ...
 - 初学深度学习(TensorFlow框架的心得and经验总结)自用环境的总结
		
初学者的时间大部分浪费在了环境上了: 建议直接上Linux系统,我推荐国产的深度系统,deepin这几年一直在不断的发展,现在15.4已经很不错了 1,图形化界面很漂亮,内置正版crossover,并 ...
 - 初学tensorflow遇到的Error——UnrecognizedFlagError: Unknown command line flag 'f'
		
最近在学习<tensorflow实战>时需要下载cifar10数据集,在cifar10目录下用到命令: import cifar10,cifar10_inputcifar10.maybe_ ...
 - 【深度学习与TensorFlow 2.0】卷积神经网络(CNN)
		
注:在很长一段时间,MNIST数据集都是机器学习界很多分类算法的benchmark.初学深度学习,在这个数据集上训练一个有效的卷积神经网络就相当于学习编程的时候打印出一行“Hello World!”. ...
 - 学习笔记TF045:人工智能、深度学习、TensorFlow、比赛、公司
		
人工智能,用计算机实现人类智能.机器通过大量训练数据训练,程序不断自我学习.修正训练模型.模型本质,一堆参数,描述业务特点.机器学习和深度学习(结合深度神经网络). 传统计算机器下棋,贪婪算法,Alp ...
 - 【TensorFlow/简单网络】MNIST数据集-softmax、全连接神经网络,卷积神经网络模型
		
初学tensorflow,参考了以下几篇博客: soft模型 tensorflow构建全连接神经网络 tensorflow构建卷积神经网络 tensorflow构建卷积神经网络 tensorflow构 ...
 - 初次接触tensorflow
		
要确保已经明白神经网络和卷积神经网络的原理.如果不明白,先学习参考资料1.tensorflow中有很多api,可以分成2大类.1类是比较低层的api(tf.train),叫TensorFlow Cor ...
 - 运用tensorflow写的第一个神经网络
		
因为实训课要用LSTM+attention机制在钢材领域做一个关系抽取.作为仅仅只学过一点深度学习网络的小白在b站上学习了RNN,LSTM的一些理论知识. 但只懂得一些理论知识是无法完成关系抽取的任务 ...
 
随机推荐
- Vue2:实例生命周期、js生命周期
			
1.vue2生命周期 每个 Vue 实例在被创建之前都要经过一系列的初始化过程.例如,实例需要配置数据观测(data observer).编译模版.挂载实例到 DOM ,然后在数据变化时更新 DOM ...
 - spring cloud(三) config
			
spring cloud 配置中心 config 搭建过程 1.搭建config-server 服务端 1.1. 新建boot工程 pom引入依赖 <!-- config配置中心 --> ...
 - 企业级任务调度框架Quartz(3) 一个简单的Quartz 例子
			
1. 一个简单的Quartz 工程 本示例应用比起众所周知的 System.out.println("Hello world from Quartz") 来还是要有趣些.当 ...
 - JS 封装一个求圆面积的函数  传值:半径
			
y(6) var s = ""; function y (r){ s = Math.PI*r*r; alert(s); }
 - C++基础 (8) 第八天 数组指针 模板指针 C语言中的多态 模板函数
			
1昨日回顾 2 多态的练习-圆的图形 3多态的练习-程序员薪资 4员工管理案例-抽象类和技术员工的实现 employee.h: employee.cpp: technician.h: technici ...
 - 关于错误CSC : error CS0006:未能找到元数据文件
			
在不同的解决方案中把一个项目搬来搬去,终于出现了传说的CSC : error CS0006.编译的时候总是提示一个引用中不存在的项找不到.无论怎样删除项目,删除引用都没法通过生成. 最终解决方案: 用 ...
 - js   js键盘各键对应的代码   ---转
			
0x1 鼠标左键\r 0x2 鼠标右键\r 0x3 CANCEL 键\r 0x4 鼠标中键\r 0x8 BACKSPACE 键\r 0x9 TAB 键\r 0xC CLEAR 键\r 0xD ENTE ...
 - Linux C++服务器端进程SDK
			
目标:开发人员在这个SDK的基础上开发,不用关注技术细节,只需要开发对应业务消息处理函数即可 1.每个进程SDK包括一个系统服务和多个业务服务,对外发布服务ID,每个服务有一个请求队列和一个反馈队列, ...
 - CSS BFC学习笔记
			
BFC,全称是Block Formatting Context,块级格式化上下文. 详细是什么,能够理解为页面元素的一种特性.触发了BFC的元素往往会产生一些对刚開始学习的人而言意想不到的效果. 触发 ...
 - Class example in C/C++
			
class Player { private: int health; //these are the attributes int strength; int agility; pu ...