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初学的更多相关文章

  1. TensorFlow初学教程(完整版)

    1:你想要学习TensorFlow,首先你得安装Tensorflow,在你学习的时候你最好懂以下的知识:    a:怎么用python编程:     b:了解一些关于数组的知识:     c:最理想的 ...

  2. 全方面讲解TensorFlow

    任何曾经试图在 Python 中只利用 NumPy 编写神经网络代码的人都知道那是多么麻烦.编写一个简单的一层前馈网络的代码尚且需要 40 多行代码,当增加层数时,编写代码将会更加困难,执行时间也会更 ...

  3. 初学深度学习(TensorFlow框架的心得and经验总结)自用环境的总结

    初学者的时间大部分浪费在了环境上了: 建议直接上Linux系统,我推荐国产的深度系统,deepin这几年一直在不断的发展,现在15.4已经很不错了 1,图形化界面很漂亮,内置正版crossover,并 ...

  4. 初学tensorflow遇到的Error——UnrecognizedFlagError: Unknown command line flag 'f'

    最近在学习<tensorflow实战>时需要下载cifar10数据集,在cifar10目录下用到命令: import cifar10,cifar10_inputcifar10.maybe_ ...

  5. 【深度学习与TensorFlow 2.0】卷积神经网络(CNN)

    注:在很长一段时间,MNIST数据集都是机器学习界很多分类算法的benchmark.初学深度学习,在这个数据集上训练一个有效的卷积神经网络就相当于学习编程的时候打印出一行“Hello World!”. ...

  6. 学习笔记TF045:人工智能、深度学习、TensorFlow、比赛、公司

    人工智能,用计算机实现人类智能.机器通过大量训练数据训练,程序不断自我学习.修正训练模型.模型本质,一堆参数,描述业务特点.机器学习和深度学习(结合深度神经网络). 传统计算机器下棋,贪婪算法,Alp ...

  7. 【TensorFlow/简单网络】MNIST数据集-softmax、全连接神经网络,卷积神经网络模型

    初学tensorflow,参考了以下几篇博客: soft模型 tensorflow构建全连接神经网络 tensorflow构建卷积神经网络 tensorflow构建卷积神经网络 tensorflow构 ...

  8. 初次接触tensorflow

    要确保已经明白神经网络和卷积神经网络的原理.如果不明白,先学习参考资料1.tensorflow中有很多api,可以分成2大类.1类是比较低层的api(tf.train),叫TensorFlow Cor ...

  9. 运用tensorflow写的第一个神经网络

    因为实训课要用LSTM+attention机制在钢材领域做一个关系抽取.作为仅仅只学过一点深度学习网络的小白在b站上学习了RNN,LSTM的一些理论知识. 但只懂得一些理论知识是无法完成关系抽取的任务 ...

随机推荐

  1. SQL数据查询

    CREATE TABLE class0328( id INT, cname ), sex ), age INT, birthday DATE, html DOUBLE, js DOUBLE, scor ...

  2. nginx安装http2.0协议

    1.HTTP2协议 HTTP 2.0 的主要目标是改进传输性能,实现低延迟和高吞吐量.从另一方面看,HTTP 的高层协议语义并不会因为这次版本升级而受影响.所有HTTP 首部.值,以及它们的使用场景都 ...

  3. jmeter录制

    1.添加线程组 2.添加HTTP代理服务 3.浏览器的代理设置 4.添加证书 5.排除模式 .*\.(jpg|css|png|git).*或者 .*\.jpg 6.录制只限制某一个ip段 7.最后一句 ...

  4. Docker:分布式系统的软件工程革命(上)

    转自:http://cxwangyi.github.io/story/docker_revolution_1.md.html Docker:分布式系统的软件工程革命(上) 作者:王益 最后更新:201 ...

  5. nyoj124-中位数

    中位数 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 一组数据按从小到大的顺序依次排列,处在中间位置的一个数叫做中位数. 比如 1 5 10 11 9  其中位数就是9 ...

  6. Elasticsearch 三种分页方式

    from + size 浅分页 "浅"分页可以理解为简单意义上的分页.它的原理很简单,就是查询前20条数据,然后截断前10条,只返回10-20的数据.这样其实白白浪费了前10条的查 ...

  7. mysql在windows下主从同步配置

    mysql主从同步:   1.为什么要主从同步? 在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一.尤其是在大规模系统中,数据库集群已经成为必备的配置之一.集群的好处主要有:查询负载. ...

  8. AS常见的错误

    导入的项目使用的gradle版本和本地的要一致,不然会提示类似"Minimum supported Gradle version is 3.3. Current version is 2.1 ...

  9. POJ 题目3461 Oulipo(KMP)

    Oulipo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26479   Accepted: 10550 Descript ...

  10. Codeforces Beta Round #29 (Div. 2, Codeforces format) C. Mail Stamps 拓扑排序

    C. Mail Stamps     One day Bob got a letter in an envelope. Bob knows that when Berland's post offic ...