tensorflowtensorflow入门


备注

本节概述了tensorflow是什么,以及开发人员可能想要使用它的原因。

它还应该提到tensorflow中的任何大型主题,并链接到相关主题。由于tensorflow文档是新的,您可能需要创建这些相关主题的初始版本。

基本例子

Tensorflow不仅仅是一个深度学习框架。它是以并行和分布方式执行一般数学运算的通用计算框架。下面描述这样的一个例子。

线性回归

通常使用且计算相当简单的基本统计示例是将线拟合到数据集。在张量流中这样做的方法在下面的代码和注释中描述。

(TensorFlow)脚本的主要步骤是:

  1. 声明占位符x_phy_ph )和变量Wb
  2. 定义初始化运算符( init
  3. 声明占位符和变量的操作( y_predlosstrain_op
  4. 创建一个会话( sess
  5. 运行初始化运算符( sess.run(init)
  6. 运行一些图形操作(例如sess.run([train_op, loss], feed_dict={x_ph: x, y_ph: y})

图形构造使用Python TensorFlow API完成(也可以使用C ++ TensorFlow API完成)。运行图形将调用低级C ++例程。

'''
function: create a linear model which try to fit the line 
          y = x + 2 using SGD optimizer to minimize 
          root-mean-square(RMS) loss function

'''
import tensorflow as tf
import numpy as np

# number of epoch
num_epoch = 100

# training data x and label y
x = np.array([0., 1., 2., 3.], dtype=np.float32)
y = np.array([2., 3., 4., 5.], dtype=np.float32)

# convert x and y to 4x1 matrix
x = np.reshape(x, [4, 1])
y = np.reshape(y, [4, 1])

# test set(using a little trick)
x_test = x + 0.5
y_test = y + 0.5

# This part of the script builds the TensorFlow graph using the Python API

# First declare placeholders for input x and label y
# Placeholders are TensorFlow variables requiring to be explicitly fed by some 
# input data
x_ph = tf.placeholder(tf.float32, shape=[None, 1])
y_ph = tf.placeholder(tf.float32, shape=[None, 1])

# Variables (if not specified) will be learnt as the GradientDescentOptimizer
# is run
# Declare weight variable initialized using a truncated_normal law
W = tf.Variable(tf.truncated_normal([1, 1], stddev=0.1))
# Declare bias variable initialized to a constant 0.1
b = tf.Variable(tf.constant(0.1, shape=[1]))

# Initialize variables just declared 
init = tf.initialize_all_variables()

# In this part of the script, we build operators storing operations
# on the previous variables and placeholders.
# model: y = w * x + b
y_pred = x_ph * W + b

# loss function
loss = tf.mul(tf.reduce_mean(tf.square(tf.sub(y_pred, y_ph))), 1. / 2)
# create training graph
train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

# This part of the script runs the TensorFlow graph (variables and operations
# operators) just built.
with tf.Session() as sess:
    # initialize all the variables by running the initializer operator
    sess.run(init)
    for epoch in xrange(num_epoch):
        # Run sequentially the train_op and loss operators with
        # x_ph and y_ph placeholders fed by variables x and y
        _, loss_val = sess.run([train_op, loss], feed_dict={x_ph: x, y_ph: y})
        print('epoch %d: loss is %.4f' % (epoch, loss_val))

    # see what model do in the test set
    # by evaluating the y_pred operator using the x_test data
    test_val = sess.run(y_pred, feed_dict={x_ph: x_test})
    print('ground truth y is: %s' % y_test.flatten())
    print('predict y is     : %s' % test_val.flatten())
 

数到10

在这个例子中,我们使用Tensorflow计数到10. 是的,这是完全矫枉过正,但它是一个很好的例子,显示使用Tensorflow所需的绝对最小设置

import tensorflow as tf

# create a variable, refer to it as 'state' and set it to 0
state = tf.Variable(0)

# set one to a constant set to 1
one = tf.constant(1)

# update phase adds state and one and then assigns to state
addition = tf.add(state, one)
update = tf.assign(state, addition )

# create a session
with tf.Session() as sess:
  # initialize session variables
  sess.run( tf.global_variables_initializer() )

  print "The starting state is",sess.run(state)

  print "Run the update 10 times..."
  for count in range(10):
    # execute the update
    sess.run(update)

  print "The end state is",sess.run(state)
 

这里要认识到的重要一点是, 状态,一个,添加和更新实际上并不包含值。相反,它们是对Tensorflow对象的引用。最终结果不是状态 ,而是通过使用Tensorflow使用sess.run(状态)来评估它。

此示例来自https://github.com/panchishin/learn-to-tensorflow 。还有其他几个例子和一个很好的毕业学习计划,以熟悉在python中操作Tensorflow图。

安装或设置

从Tensorflow 1.0版开始,安装变得更加容易。至少要安装TensorFlow,需要在他们的机器上安装pip,其python版本至少为2.7或3.3+。

pip install --upgrade tensorflow      # for Python 2.7
pip3 install --upgrade tensorflow     # for Python 3.n
 

对于GPU机器上的张量流(从1.0开始需要CUDA 8.0和cudnn 5.1,不支持AMD GPU)

pip install --upgrade tensorflow-gpu  # for Python 2.7 and GPU
pip3 install --upgrade tensorflow-gpu # for Python 3.n and GPU
 

测试它是否工作打开正确版本的python 2或3并运行

import tensorflow
 

如果成功没有错误,那么您的计算机上安装了tensorflow。



*请注意,这可以引用主分支,可以在上面的链接上更改此参考当前的稳定版本。)

Tensorflow基础知识

Tensorflow基于数据流图的原理工作。要执行一些计算,有两个步骤:

  1. 将计算表示为图形。
  2. 执行图表。

表示:与任何有向图一样,Tensorflow图由节点和有向边组成。

节点:节点也称为Op(代表操作)。一个节点可以有多个传入边但只有一个传出边。

边缘:指示节点的传入或传出数据。在这种情况下,一些节点(Op)的输入和输出。

每当我们说数据时,我们指的是一个称为Tensor的n维向量。 Tensor有三个属性: Rank,Shape和Type

  • 等级表示张量的维数(立方体或框具有等级3)。
  • 形状表示这些尺寸的值(框可以具有形状1x1x1或2x5x7)。
  • Type表示Tensor的每个坐标中的数据类型。

执行:即使构建了图形,它仍然是一个抽象实体。在我们运行它之前,实际上没有计算。要运行图形,我们需要将CPU资源分配给图形内的Ops。这是使用Tensorflow会话完成的。步骤是:

  1. 创建一个新会话。
  2. 在图表中运行任何Op。通常我们运行最终的Op,我们期望计算的输出。

Op上的传入边缘就像是另一个Op上的数据依赖。因此,当我们运行任何Op时,它上面的所有传入边都被跟踪,另一边的ops也被运行。

注意:也可以使用称为数据源或接收器的播放角色的特殊节点。例如,你可以有一个Op,它给出一个常数值,因此没有传入的边缘(在下面的例子中参考值'matrix1')和类似的Op没有传出边缘的结果被收集(参见下面例子中的'product'值)。

例:

示例图

import tensorflow as tf

# Create a Constant op that produces a 1x2 matrix.  The op is
# added as a node to the default graph.
#
# The value returned by the constructor represents the output
# of the Constant op.
matrix1 = tf.constant([[3., 3.]])

# Create another Constant that produces a 2x1 matrix.
matrix2 = tf.constant([[2.],[2.]])

# Create a Matmul op that takes 'matrix1' and 'matrix2' as inputs.
# The returned value, 'product', represents the result of the matrix
# multiplication.
product = tf.matmul(matrix1, matrix2)

# Launch the default graph.
sess = tf.Session()

# To run the matmul op we call the session 'run()' method, passing 'product'
# which represents the output of the matmul op.  This indicates to the call
# that we want to get the output of the matmul op back.
#
# All inputs needed by the op are run automatically by the session.  They
# typically are run in parallel.
#
# The call 'run(product)' thus causes the execution of three ops in the
# graph: the two constants and matmul.
#
# The output of the op is returned in 'result' as a numpy `ndarray` object.
result = sess.run(product)
print(result)
# ==> [[ 12.]]

# Close the Session when we're done.
sess.close()