1、MacOS Tensorflow(CPU版本)下载和安装



pip3 install tensorflow


2、Tensorflow的基本用法

  • 使用图(graph)来表示计算任务
  • 在回话(Session)的上下文(context)中执行图
  • 使用tensor表示数据
  • 通过变量(Variable)维护状态
  • 使用feed和fetch可以为任意的操作赋值或者从中获取数据
  综述:Tensorflow图中的节点称为op(operation),一个op获得o个或者多个tensor(数据)来执行计算,产生0个或者多个tensor(数据),每个tensor是一个类型化的多维数组
  计算图:Tensorflow程序通常分为构建阶段和执行阶段,构建阶段:op的执行步骤被描述成一个图,执行阶段:使用回话执行图中的op
  构建图:构建图的第一步是创建源op(源op不需要任何输入,如常量Constant),源op的输出被传递给其它op做运算。Tensorflow Python库有一个默认图,op构造器可以为图增加节点



import tensorflow as tf

# 创建一个常量op(节点),产生一个1X2矩阵
# 添加到默认图中
# 构造器的返回值代表该常量的op的返回值
matrix1 = tf.constant([[3., 3.]])

# 创建一个常量op(节点),产生一个2X1矩阵
matrix2 = tf.constant([[2.],[2.]])

# 创建一个矩阵乘法matmul op,把matrix1和matrix2作为输入
# 返回值product代表矩阵乘法的结果

product = tf.matmul(matrix1, matrix2)

# 启动默认图
# 调用sess的run()方法来执行矩阵乘法的op,传入值为product,输出矩阵的乘法op
# 返回值是一个numpy.ndarray对象
with tf.Session() as sess:
    result = sess.run(product)
    print(type(result),result)



   调用CPU或者GPU:一般不需要显示指定CPU或者GPU,Tensorflow能自动检测,使用找到的第一个来计算,如果机器上有超过一个可用的,为来让tensorflow使用,必须将op明确指派给它们执行。



with tf.Session() as sess:
    with tf.device('/gpu:1'):
        matrix1 = tf.constant([[3., 3.]])
        matrix2 = tf.constant([[2.], [2.]])
        product = tf.matmul(matrix1, matrix2)



  • '/cpu:0':机器的cpu
  • '/gpu:0':机器的第一个gpu
  • '/gpu:1':机器的第二个gpu
  • ....
  Tensor:Tensorflow程序使用tensor数据结构来代表数据,可以把tensor看成一个n维数组或者列表,tensor包含静态类型rank和shape
  变量:Variable维护图执行过程中的状态



import tensorflow as tf

# 创建变量,初始化为标量0
state = tf.Variable(0, name='counter')

# 创建一个op,使state增加1
one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)

# 初始所有化变量
init_op = tf.global_variables_initializer()

# 启动图,运行op
with tf.Session() as sess:
    # 运行init
    sess.run(init_op)
    print(sess.run(state))
    for _ in range(3):
        sess.run(update)
        print('new_value:',sess.run(new_value))
        print('state:',sess.run(state))



import tensorflow as tf

input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)

intermed = tf.add(input2, input3)
mul = tf.multiply(input1, intermed)

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



Feed_dict和tf.placeholder:

  tf.placeholder(dtype, shape=None, name=None):占位符没有初始值,但必须指定类型

    参数:

      dtype:数据类型,tf.int32,float32,string等

      shape:数据形状,默认None,shape=1,shape=[2,3],shape=[None,3]

      name:名称

    返回:Tensor类型

  feed_dict:字典,给出placeholder的值



import tensorflow as tf
import numpy as np

# exp-1
x = tf.placeholder(tf.string)
with tf.Session() as sess:
    output = sess.run(x, feed_dict={x: 'Hello World!'})
    print(output)

# exp-2
x = tf.placeholder(tf.string)
y = tf.placeholder(tf.int32)
z = tf.placeholder(tf.float32)
with tf.Session() as sess:
    output = sess.run([x,y,z], feed_dict={x: 'Hello World!', y:1, z:0.1})
    print(output)
# exp-3
x = tf.placeholder(tf.float32, shape=(None,3))
y = tf.matmul(x, x)
with tf.Session() as sess:
    rand_array = np.random.rand(3,3)
    print(sess.run(y, feed_dict={x: rand_array}))