tensorflow学习笔记(一):基础知识



概述

TensorFlow 是由 Google Brain 团队为深度神经网络(DNN)开发的功能强大的开源软件库,于 2015 年 11 月首次发布。他是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络算法库DistBelief。

TensorFlow 的特点

  • 支持所有流行语言,如 Python、C++、Java、R和Go;
  • 可以在多种平台上工作,甚至是移动平台和分布式平台;
  • 它受到所有云服务(AWS、Google和Azure)的支持;
  • Keras——高级神经网络 API,已经与 TensorFlow 整合;
  • 与 Torch/Theano 比较,TensorFlow 拥有更好的计算图表可视化;
  • 允许模型部署到工业生产中,并且容易使用;
  • 有非常好的社区支持;
  • TensorFlow 不仅仅是一个软件库,它是一套包括 TensorFlow,TensorBoard 和
  • TensorServing 的软件。

一、基本概念

tensorflow是一个编程系统,使用图来表示计算任务,图中的节点称为op(operation),一个op获得0个或者多个Tensor,执行计算,产生0个或者多个Tensor。Tensor看作是一个n维的数组或者列表。图必须在会话(Session)中被启动。

  • 使用图来表示计算任务;
  • 在被称之为会话(Session)的上下文(context)中执行图;
  • 使用Tensor表示数据;
  • 通过变量(Variable)维护状态;
  • 使用feed和fetch可以为任意的操作赋值从其中获取数据。

在这里插入图片描述

二、基础语法

2.1 常量、图和会话

在tensorflow中,用tf.constant()定义常量,用 Session 来启动图, 并调用 Session.run() 方法执行操作.

import tensorflow as tf

#创建常量op
m1=tf.constant([[3,3]])
#创建一个常量op
m2=tf.constant([[2],[3]])
#创建矩阵乘法
product=tf.matmul(m1,m2)

#定义会话,启动默认图
with tf.Session() as sess:
    # 调用sess的run方法来执行矩阵乘法
    # run(product)触发了图中的3个op
    print("m1:",sess.run(m1))
    print("m2:", sess.run(m2))
    #其实,只需要最后一步就可以,这里显示需要,打印了m1和m2
    print("product:",sess.run(product))

结果如下:

#输出:
m1:
      [[3 3]]
m2:
      [[2]
       [3]]
product:
      [[15]]

2.2变量

在tensorflow中,用tf.Variable()定义变量,并用tf.global_variables_initializer()来初始化变量,用 Session 来启动图, 并调用 Session.run() 方法执行操作.


import tensorflow as tf
#定义一个变量
x=tf.Variable([1,2])

a=tf.constant([3,3])
#增加一个减法op
sub=tf.subtract(x,a)
#增加一个加法op
add=tf.add(x,sub)
#全局变量的初始化
init=tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    print("sub:\n",sess.run(sub))
    print("add:\n",sess.run(add))

结果如下:

#输出:
sub:
     [-2 -1]
add:
     [-1  1]

2.3 Fetch

为了取回操作的输出内容, 可以在使用 Session 对象的 run() 调用执行图时, 传入一些 tensor, 这些 tensor 会帮助你取回结果

input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2, input3)
mul = tf.mul(input1, intermed)

with tf.Session():
  result = sess.run([mul, intermed])
  print result

输出结果:

# 输出:
# [array([ 21.], dtype=float32), array([ 7.], dtype=float32)]

需要获取的多个 tensor 值,在 op 的一次运行中一起获得(而不是逐个去获取 tensor)。

2.4 Feed和placeholder

feed 使用一个 tensor 值临时替换一个操作的输出结果。你可以提供 feed 数据作为 run() 调用的参数。 feed 只在调用它的方法内有效, 方法结束, feed 就会消失。最常见的用例是将某些特殊的操作指定为 “feed” 操作, 标记的方法是使用 tf.placeholder() 为这些操作创建占位符。


#创建占位符,初始没有值,在运行时才传入值
input1=tf.placeholder(tf.float32)
input2=tf.placeholder(tf.float32)
output=tf.multiply(input1,input2)

with tf.Session() as sess:
    #feed的数据以字典的形式传入
    print(sess.run(output,feed_dict={input1:[7.],input2:[2.]}))
    

输出结果:

# 输出:
# [array([ 14.], dtype=float32)]

三、简单示例

利用tensorflow采用最小二乘法去简单的去拟合一条曲线,给出曲线的斜率和截距:
y = 0.1 x + 0.2 y=0.1x+0.2 y=0.1x+0.2

import tensorflow as tf
import numpy as np

#使用numpy生成100个随机点
x_data=np.random.rand(100)
y_data=x_data*0.1+0.2

#构造一个线性模型
b=tf.Variable(0.)
k=tf.Variable(0.)
y=k*x_data+b    #常量相乘可以直接用乘号

#二次代价函数
loss=tf.reduce_mean(tf.square(y_data-y))
#定义一个梯度下降法来训练模型
optimizer=tf.train.GradientDescentOptimizer(0.2)
#定义最小化代价函数
train=optimizer.minimize(loss)

init=tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    for step in range(201):
        sess.run(train)
        if step%20==0:
            print(step,sess.run([k,b]))

结果如下:


0 [0.054136854, 0.10028906]
20 [0.10375962, 0.19796239]
40 [0.10223676, 0.19878778]
60 [0.10133075, 0.1992788]
80 [0.100791715, 0.19957092]
100 [0.10047101, 0.19974473]
120 [0.100280225, 0.19984813]
140 [0.100166716, 0.19990964]
160 [0.10009918, 0.19994625]
180 [0.10005901, 0.19996803]
200 [0.10003511, 0.19998097]

循环201步后,得到的 k k k b b b已经非常接近0.1和0.2。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值