你好,游客 登录
背景:
阅读新闻

人工智能其实也没有那么难嘛!TensorFlow了解一下?最详细教程!

[日期:2018-06-20] 来源:博客园   作者: [字体: ]

那目前人工智能的应用场景有哪些:

OCR、语音技术(比如Siri)、大数据应用等~

机器学习:一种实现人工智能的方法

机器学习最基本的做法,是使用算法来解析数据、从中学习,然后对事件做出决策和预测。

需要用大量的数据来“训练”,通过各种算法从数据中学习如何完成任务。

举个例子,当浏览网上商城时,经常会出现商品推荐的信息。

按照JB的理解,深度学习最终可能会渗透在其他所有机器学习算法;

当然,并不是说深度学习就是万能的,也并不一定比机器学习牛逼,要根据场景来区别;

人工神经网络:一种机器学习的算法

以“停止(Stop)标志牌”为例,将一个停止标志牌图像的所有元素都打碎,然后用神经元进行“检查”:八边形的外形、消防车般的红颜色、鲜明突出的字母、交通标志的典型尺寸和静止不动运动特性等等。神经网络的任务就是给出结论,它到底是不是一个停止标志牌。神经网络会根据所有权重,给出一个经过深思熟虑的猜测——“概率向量”。

什么是数据流图

数据流图是描述有向图中的数值计算过程。有向图中的节点通常代表数学运算,但也可以表示数据的输入、输出和读写等操作;有向图中的边表示节点之间的某种联系,它负责传输多维数据(Tensors)。

节点可以被分配到多个计算设备上,可以异步和并行地执行操作。因为是有向图,所以只有等到之前的入度节点们的计算状态完成后,当前节点才能执行操作。

TensorFlow的特性

  • 灵活性,TensorFlow不是一个严格的神经网络工具包,只要你可以使用数据流图来描述你的计算过程,你可以使用TensorFlow做任何事情。你还可以方便地根据需要来构建数据流图,用简单的Python语言来实现高层次的功能。

  • 可移植性,TensorFlow可以在任意具备CPU或者GPU的设备上运行,你可以专注于实现你的想法,而不用去考虑硬件环境问题,你甚至可以利用Docker技术来实现相关的云服务。

  • 提高开发效率,TensorFlow可以提升你所研究的东西产品化的效率,并且可以方便与同行们共享代码- 支持语言选项,目前TensorFlow支持Python和C++语言。

  • 充分利用硬件资源,最大化计算性能

输入tensorflow,install package,然后就是等待漫长的安装过程了;

当然,喜欢高难度的同学,可以看github的官网介绍,祝你好运~

https://github.com/jikexueyuanwiki/tensorflow-zh/blob/master/SOURCE/get_started/os_setup.md

验证

直接 import tensorflow ,运行试试看有没有问题即可;如果有问题,会直接报错的~

第一个例子

官网有个例子,直接拿来用了:

基本使用

需要理解在TensorFlow中,是如何:

  • 将计算流程表示成图;

  • 通过Sessions来执行图计算;

  • 将数据表示为tensors;

  • 使用Variables来保持状态信息;

  • 分别使用feeds和fetches来填充数据和抓取任意的操作结果;

TensorFlow的基础概念

  • 图(Graph):用来表示计算任务,也就我们要做的一些操作。

  • 会话(Session):建立会话,此时会生成一张空图;在会话中添加节点和边,形成一张图,一个会话可以有多个图,通过执行这些图得到结果。如果把每个图看做一个车床,那会话就是一个车间,里面有若干个车床,用来把数据生产成结果。

  • Tensor:用来表示数据,是我们的原料。

  • 变量(Variable):用来记录一些数据和状态,是我们的容器。

  • feed和fetch:可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据。相当于一些铲子,可以操作数据。

形象的比喻是:把会话看做车间,图看做车床,里面用Tensor做原料,变量做容器,feed和fetch做铲子,把数据加工成我们的结果。

如果需要使用GPU,则如下处理:

with tf.Session() as sess:
with tf.device("/cpu:0"):
matrix1 = tf.constant([[3,3]]) <em>#这是一行2列</em>
matrix2 = tf.constant([[2],[2]]) <em>#这个是两行1列</em>
product = tf.matmul(matrix1,matrix2) <em>#创建一个矩阵乘法</em> <em>#默认的图,有3个节点,两个constant和一个matmul</em>
sess = tf.Session() <em>#定义一个会话</em>
result = sess.run(product) <em>#运算乘法,得到结果</em> print(result)
sess.close() <em>#关闭会话</em>

device中的各个字符串含义如下:

  • "/cpu:0": 你机器的CPU;

  • "/gpu:0": 你机器的第一个GPU;

  • "/gpu:1": 你机器的第二个GPU;

常量

tf.constant(value, dtype=None, shape=None, name='Const', verify_shape=False),value为值,dtype类型,shape为张量形状,name名称、verify_shape默认False,这些项可选。作用创建一个常量。

a = tf.constant(2, name="a") # print(a) = 2b = tf.constant(2.0, dtype=tf.float32, shape=[2,2], name="b") # 2x2矩阵,值为2c = tf.constant([[1, 2], [3, 4]], name="c") # 2x2矩阵,值1,2,3,4

是不是懵逼了?没事,留个大概影响就好了~

第三个例子--填充

有的时候,会在声明变量的时候不赋值,计算的时候才进行赋值,这个时候feed就派上用场了

input1 = tf.placeholder(tf.float32)<em>#创建一个变量占位符input1</em>
input2 = tf.placeholder(tf.float32)<em>#创建一个变量占位符input2</em>
mul = tf.multiply(input1, input2)<em>#乘法操作</em>
with tf.Session() as sess:

result = sess.run([mul], feed_dict={input1:[7.], input2:[2.]}) <em>#在运算时,用feed设置两个输入的值</em> print(result)

综合例子

import tensorflow as tfimport os
os.environ["TF_CPP_MIN_LOG_LEVEL"]='2'import numpy as np
x_data = np.random.rand(100).astype("float32")
y_data = x_data * 0.1 + 0.3<em># 模拟生成100对数据对, 对应的函数为y = x * 0.1 + 0.3</em><em># numpy是Python的一个科学计算库,提供矩阵运算的功能</em><em># astype是转换数组的数据类型</em>
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))b = tf.Variable(tf.zeros([1]))<em>#产生尺寸为1的张量</em>y = W * x_data + b<em># 指定w和b变量的取值范围(注意我们要利用TensorFlow来得到w和b的值)</em><em># tf.random_uniform,TensorFlow随机值函数,返回1矩阵,数值产生于-1.0跟1.0之间</em>
loss = tf.reduce_mean(tf.square(y - y_data))<em>#reduce_mean求平均值</em><em>#square是对里面的值求平方操作</em>
optimizer = tf.trAIn.GradientDescentOptimizer(0.5)<em>#这个类是实现梯度下降算法的优化器,第一个参数是要使用的学习率 </em>
train = optimizer.minimize(loss)<em># 最小化均方误差</em>
init = tf.global_variables_initializer()<em># 初始化TensorFlow参数</em>
sess = tf.Session()
sess.run(init)<em># 运行数据流图(注意在这一步才开始执行计算过程)</em>for step in range(201):
sess.run(train) if step % 20 == 0: print(step, sess.run(W), sess.run(b))<em># 观察多次迭代计算时,w和b的拟合值</em><em># 最好的情况是w和b分别接近甚至等于0.1和0.3</em>

输出的结果:

0 [-0.39065683] [0.66207296]20 [-0.0082044] [0.3498935]40 [0.07841039] [0.30995506]60 [0.09569232] [0.3019863]80 [0.09914052] [0.30039632]100 [0.09982852] [0.30007908]120 [0.09996579] [0.30001578]140 [0.09999318] [0.30000314]160 [0.09999864] [0.30000064]180 [0.09999974] [0.30000013]200 [0.09999995] [0.30000004]

 

收藏 推荐 打印 | 录入:Cstor | 阅读:
相关新闻      
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款