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的一些理论知识. 但只懂得一些理论知识是无法完成关系抽取的任务 ...
随机推荐
- Python3与2的故事一
print函数:(Python3中print为一个函数,必须用括号括起来:Python2中print为class) Python 2 的 print 声明已经被 print() 函数取代了,这意味着我 ...
- python海龟的使用
############################螺旋正方形############################### import turtle turtle.left(90)for i ...
- C++基础 (4) 第四天 this指针 全局函数和成员函数 友元 操作符重载
1static强化练习-仓库进货和出货 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; c ...
- vue 函数配置项watch以及函数 $watch 源码分享
Vue双向榜单的原理 大家都知道Vue采用的是MVVM的设计模式,采用数据驱动实现双向绑定,不明白双向绑定原理的需要先补充双向绑定的知识,在watch的处理中将运用到Vue的双向榜单原理,所以 ...
- HDU2516 - 取石子游戏【斐波那契博弈】
基本描述 有一堆个数为n的石子,游戏双方轮流取石子,满足: 先手不能再第一次把所有石子取完: 之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间,包括1和对手取的石子数的2倍. 取最后石子的人 ...
- Python JSON - 世界人口图
世界人口图 从https://datahub.io/网站搜索population,下载世界人口json数据. from pygal.maps.world import COUNTRIES def ge ...
- Elasticsearch Sliced Scroll分页检索案例分享
面试:你懂什么是分布式系统吗?Redis分布式锁都不会?>>> The best elasticsearch highlevel java rest api-----bboss ...
- ZOJ 3203
很简单的一题,注意墙上的影子是放大就行.用三分. #include <iostream> #include <cstdio> #include <cstring> ...
- Bridge模式
Bridge模式 Bridge模式 在面向对象的开发过程中,要做到2点:1.高内聚(cohesion).2.松耦合(coupling).可是在实际开发过程中难以把握,比如会遇到这种问题: 1)客户给了 ...
- hdu(2846)Repository
Problem Description When you go shopping, you can search in repository for avalible merchandises by ...