第四百一十六节,Tensorflow简介与安装

TensorFlow是什么

Tensorflow是一个Google开发的第二代机器学习系统,克服了第一代系统DistBelief仅能开发神经网络算法、难以配置、依赖Google内部硬件等局限性,应用更加广泛,并且提高了灵活性和可移植性,速度和扩展性也有了大幅提高。字面上理解,TensorFlow就是以张量(Tensor)在计算图(Graph)上流动(Flow)的方式的实现和执行机器学习算法的框架。具有以下特点:

  • 灵活性。TensorFlow不是一个严格的“神经网络”库。只要可以将计算表示成数据流图,就可以使用TensorFlow,比如科学计算中的偏微分求解等。(实际上其官网的介绍中对TF的定位就是基于数据流图的科学计算库,而非仅仅是机器学习库)
  • 可移植性。同一份代码几乎不经过修改既可以部署到有任意数量CPU、GPU或TPU(Tensor Processing Unit,Google专门为机器学习开发的处理器)的PC、服务器或移动设备上。
  • 自动求微分。同Theano一样,TensorFlow也支持自动求微分,用户不需要再通过反向传播求解梯度。
  • 多语言支持。TensorFlow官方支持Python、C++、Go和Java接口,用户可以在硬件配置较好的机器中用Python进行实验,在资源较紧张或需要低延迟的环境中用C++进行部署。
  • 性能。虽然TensorFlow最开始发布时仅支持单机,在性能评测上并不出色,但是凭借Google强大的开发实力,TensorFlow性能已经追上了其他框架
Google第一代分布式机器学习框架DistBelief在内部大规模使用后没有选择开源,而第二代TensorFlow于2015年11月在GitHub上开源,并在持续快速开发迭代中。TensorFlow最早由Google Brain的工程师开发,设计初衷是加速机器学习的研究,并快速地将研究原型转化为产品。Google选择开源TensorFlow的原因很简单:第一是希望借助社区的力量,大家一起完善TensorFlow。第二是回馈社区,Google希望让这个优秀的工具得到更多的应用,提高学术界和工业界使用机器学习的效率。
自从2015年11月开源以来,TensorFlow迅速在众多的机器学习框架中脱颖而出,在Github上获得了最多的Star

Google第一代分布式机器学习框架DistBelief在内部大规模使用后没有选择开源,而第二代TensorFlow于2015年11月在GitHub上开源,并在持续快速开发迭代中。TensorFlow最早由Google Brain的工程师开发,设计初衷是加速机器学习的研究,并快速地将研究原型转化为产品。Google选择开源TensorFlow的原因很简单:第一是希望借助社区的力量,大家一起完善TensorFlow。第二是回馈社区,Google希望让这个优秀的工具得到更多的应用,提高学术界和工业界使用机器学习的效率。

自从2015年11月开源以来,TensorFlow迅速在众多的机器学习框架中脱颖而出,在Github上获得了最多的Star.

安装 pip install tensorflow

安装时会安装以下依赖

absl-py-0.4.1
astor-0.7.1 gast-0.2.0
grpcio-1.14.2
markdown-2.6.11
numpy-1.14.5
protobuf-3.6.1
setuptools-39.1.0
six-1.11.0
tensorboard-1.10.0
termcolor-1.1.0
werkzeug-0.14.1

设置变量

import tensorflow as tf

# python创建变量
a = 3 # tensorflow创建一个变量Variable
# 创建横向量
w = tf.Variable([[0.5, 1.0]])
# 创建竖向量
x = tf.Variable([[4.0], [1.0]]) # 横向量乘以竖向量matmul
y = tf.matmul(w, x) # 全局变量初始化global_variables_initializer
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
# 执行计算run
sess.run(init_op)
# 打印结果eval
[[ 2.]]

注意:如果PyCharm提示以下信息,加两行代码即可
2018-09-10 21:02:19.937491: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
#默认为0:输出所有log信息
#设置为1:进一步屏蔽INFO信息
#设置为2:进一步屏蔽WARNING信息

#设置为3:进一步屏蔽ERROR信息

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '' # python创建变量
a = 3 # tensorflow创建一个变量Variable
# 创建横向量
w = tf.Variable([[0.5, 1.0]])
# 创建竖向量
x = tf.Variable([[4.0], [1.0]]) # 横向量乘以竖向量matmul
y = tf.matmul(w, x) # 全局变量初始化global_variables_initializer
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
# 执行计算run
sess.run(init_op)
# 打印结果eval
print(y.eval())

tensorflow很多操作跟numpy有些类似的

  • tf.zeros([3, 4], int32) ==> [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

  • tf.zeros_like(tensor) ==> [[0, 0, 0], [0, 0, 0]]

  • tf.ones([2, 3], int32) ==> [[1, 1, 1], [1, 1, 1]]

  • tf.ones_like(tensor) ==> [[1, 1, 1], [1, 1, 1]]

  • tensor = tf.constant([1, 2, 3, 4, 5, 6, 7]) => [1 2 3 4 5 6 7]

  • tensor = tf.constant(-1.0, shape=[2, 3]) => [[-1. -1. -1.] [-1. -1. -1.]]

  • tf.linspace(10.0, 12.0, 3, name="linspace") => [ 10.0 11.0 12.0]

  • tf.range(start, limit, delta) ==> [3, 6, 9, 12, 15]

 

随机

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '' # 生成的值服从具有指定平均值和标准偏差的正态分布
norm = tf.random_normal([2, 3], mean=-1, stddev=4) # 洗牌
c = tf.constant([[1, 2], [3, 4], [5, 6]])
shuff = tf.random_shuffle(c) # 每一次执行结果都会不同
sess = tf.Session()
print(sess.run(norm))
print(sess.run(shuff))
[[-5.58110332  0.84881377  7.51961231]
[ 3.27404118 -7.22483826 7.70631599]]
[[5 6]
[1 2]
[3 4]]

循环加1

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '' state = tf.Variable(0) # 每初始化一次加1
# add加
new_value = tf.add(state, tf.constant(1))
# assign重新赋值
update = tf.assign(state, new_value) with tf.Session() as sess:
# 初始化
sess.run(tf.global_variables_initializer())
print(sess.run(state))
# 循环3次
for _ in range(3):
sess.run(update)
print(sess.run(state))
0
1
2
3

加减乘除

import tensorflow as tf
import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '' a = tf.constant(5.0)
b = tf.constant(10.0) ts1 = tf.constant(8.0)
ts2 = tf.constant(9.0) x = tf.add(a, b, name="add")
y = tf.div(a, b, name="divide") # (1)加法+
ts_add1 = tf.add(ts1, ts2, name=None)
ts_add2 = ts1 + ts2 # 二者等价
# (2)减法-
ts_sub1 = tf.subtract(ts1, ts2, name=None)
ts_sub2 = ts1 - ts2 # 二者等价
# (3)乘法*
ts_mul1 = tf.multiply(ts1, ts2, name=None)
ts_mul2 = ts1 * ts2
# (4)除法/
ts_div1 = tf.divide(ts1, ts2, name=None)
ts_div2 = tf.div(ts1, ts2, name=None) # div 支持 broadcasting(即shape可不同)
ts_div3 = ts1 / ts2 with tf.Session() as sess:
print("a =", sess.run(a))
print("b =", sess.run(b))
print("a + b =", sess.run(x))
print("a/b =", sess.run(y))
print("ts_sub1", sess.run(ts_sub1))

a = 5.0
b = 10.0
a + b = 15.0
a/b = 0.5
ts_sub1 -1.0

挖坑

import tensorflow as tf
import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '' # 理解为挖一个32的坑
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32) # 两个坑相乘
output = tf.multiply(input1, input2) with tf.Session() as sess:
# 分别向两个坑填数据feed_dict
print(sess.run([output], feed_dict={input1: [7.], input2: [2.]}))
[array([ 14.], dtype=float32)]

叫卖录音网
录音网站

第四百一十六节,Tensorflow简介与安装的更多相关文章

  1. 第四百一十五节,python常用排序算法学习

    第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...

  2. 第三百一十六节,Django框架,中间件

    第三百一十六节,Django框架,中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间 ...

  3. 第二百一十六节,jQuery EasyUI,Spinner(微调)组件

    jQuery EasyUI,Spinner(微调)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Spinner(微调)组件的使用方法,这个 ...

  4. 第一百一十六节,JavaScript,DOM操作样式

    JavaScript,DOM操作样式 一.操作样式 CSS作为(X)HTML的辅助,可以增强页面的显示效果.但不是每个浏览器都能支持最新的CSS能力.CSS的能力和DOM级别密切相关,所以我们有必要检 ...

  5. 第十六节、基于ORB的特征检测和特征匹配

    之前我们已经介绍了SIFT算法,以及SURF算法,但是由于计算速度较慢的原因.人们提出了使用ORB来替代SIFT和SURF.与前两者相比,ORB有更快的速度.ORB在2011年才首次发布.在前面小节中 ...

  6. centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,curl,ping ,telnet,traceroute ,dig ,nc,nmap,host,nethogs 第十六节课

    centos linux系统日常管理3  服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,cur ...

  7. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

  8. 大白话5分钟带你走进人工智能-第二十六节决策树系列之Cart回归树及其参数(5)

                                                    第二十六节决策树系列之Cart回归树及其参数(5) 上一节我们讲了不同的决策树对应的计算纯度的计算方法, ...

  9. 第一百二十六节,JavaScript,XPath操作xml节点

    第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准 ...

随机推荐

  1. shell脚本学习1(Linux脚本攻略)

    sudo <command> < arguments> 等价于root权限执行命令 赋予所有用户文件的可执行权限:chmod a+x script.sh 执行脚本:./scri ...

  2. 文件处理(如果文件存在则追加,不存在则生成多级文件夹以及txt目录)

    public static void writeFile(String path,String fileName,String content) throws IOException { File f ...

  3. 前端可视化数据--echarts

    很幸运能够给大家分享我对echarts的见解,在一些大型互联网公司面试时都会问到会使用echarts么?  今天在做项目时有这个需求,有幸学习echarts. 二.echarts.js的优势与不足 优 ...

  4. Vue(五)模板

    模板 1. 简介 Vue.js使用基于HTML的模板语法,可以将DOM绑定到Vue实例中的数据 模板就是{{}},用来进行数据绑定,显示在页面中 也称为Mustache语法 2. 数据绑定的方式 a. ...

  5. 牛客网--C++-2017/8/19

    “\t\v\\0”长度=4:\0:字符串结束符:\\0:\将\0进行了转义,所以\0是两个字符 类的友元函数的访问权限跟类内部的方法相同,但是友元函数不属于本类的对象,一般它是另一个类的成员函数,不能 ...

  6. Unity项目中文字的统一管理

    一款游戏在研发初期就需要考虑多语言的问题,否则后期在进行多国语言版本时就面临着巨大的成本.鉴于之前页游的经验,其它同事设计出读取Excel的方式来管理所有的文字.但是我在使用中发现很致使的一个问题,当 ...

  7. 版本控制:tortoise svn的 revert to this revision和 revert changes from this revision有什么区别?

    问题: The link: http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-howto-rollback.html describes ...

  8. Elasticsearch跨集群搜索(Cross Cluster Search)

    1.简介 Elasticsearch在5.3版本中引入了Cross Cluster Search(CCS 跨集群搜索)功能,用来替换掉要被废弃的Tribe Node.类似Tribe Node,Cros ...

  9. js正则提取数字小数,提取中文,提取英文

    var value="污染物:PM2.5"; //提取中文 console.log(value.replace(/[^\u4E00-\u9FA5]/g,'')); //提取英文 c ...

  10. 解决eureka注册时使用ip而不是hostname

    eureka的client注册到server时默认是使用hostname而不是ip,这就导致client在多台机器时,服务间相互调用时也会使用hostname进行调用,从而调用失败.这时候就需要使用i ...