Python Tensorflow框架使用

阿里云2000元红包!本站用户参与享受九折优惠!

简介

TensorFlow是采用数据流图,用于数值计算的深度学习框架(常用于神经网络相),其中在数据流图里,节点表示数学操作,线表示节点间相互联系的数据,即张量(tensor)

安装

其分为CPU和GPU(更快,但要有硬件支持)版本,安装命令如下:

pip install tensorflow
pip install tensorflow-gpu

注:
安装时要求python版本为2.7+或者3.5+(3.5需要为64位)

使用步骤

Tensorflow不单独地运行单一的复杂计算,而是让我们可以先用图描述一系列可交互的计算操作,然后全部一起在Python之外运行,从而减少开销,因此基本上所有的 Tensorflow 代码都包含两个重要部分:
1.计算图(Graph),表示计算任务
2.会话(Session),用于执行计算图中的运算

因此使用步骤大体如下:
1.导入tensorflow框架:import tensorflow as tf
2.创建计算图,定义张量(如:常量tf.constant()、变量tf.Variable()等)和运算方法(如:矩阵乘法tf.matmul()等)
3.创建会话(sess = tf.session()),用于运行计算图中运算
4.通过会话运行计算(sess.run()
5.关闭会话(sess.close()

简单示例
import tensorflow as tf
x = tf.constant([[1,2]])
# 创建一个1行2列的矩阵
y = tf.constant([[3], [4]])
# 创建一个两行一列的矩阵
mul = tf.matmul(x, y)
# 将两个矩阵相乘
sess = tf.Session()
# 创建一个会话
result = sess.run(mul)
# 执行前面运算图中定义的常量和运算方法
print(result)
# 输出运算图中乘法运算执行的结果
sess.close()
# 关闭会话

由于会话执行结束后需要关闭,因此上面的也可以使用with关键字来实现自动关闭,举例:

import tensorflow as tf
with tf.Session() as sess:
    # 使用with关键字可以在sess使用结束时自动关闭资源
    x = tf.constant([[1, 2]])
    y = tf.constant([[3], [4]])
    mul = tf.matmul(x, y)
    result = sess.run(mul)
    print(result)

基本语句

定义常量

tf.constant()
注:
当运算图中定义了变量以后,需要在会话中先调用语句tf.global_variables_initializer()来对所有变量进行初始化

定义变量

tf.Variable()

基本运算
加减乘除

tf.add(x, y)/subtract(x, y)/tf.multiply(x, y)/tf.div(x, y)(整除)/tf.divide(x, y)(小数除,需要除数被除数都为float),举例:

import tensorflow as tf
init = tf.Variable(10.0)
# 定义一个变量
two = tf.constant(2.0)
# 定义一个常量
div_two = tf.divide(init, two)
# 定义一个除法运算
矩阵相乘

tf.matmul(x, y)

平方运算

tf.square(x)

获取矩阵里数的总和/平均值/最大值/最小值

tf.reduce_sum(x)/reduce_mean(x)/reduce_max(x)/reduce_min(x)

生成几行几列的随机数矩阵

tf.random_uniform([m], x, y),即生成格式为m,数值全为xy的随机数矩阵

生成几行几列的全零矩阵

tf.zeros([m]),生成格式为m的全零矩阵

更新变量

tf.assign(x, way),将xway方式更新数据
使用举例:

import tensorflow as tf
init = tf.Variable(0)
# 定义一个变量
one = tf.constant(1)
# 定义一个常量
add_one = tf.add(init, one)
# 定义一个加法运算
update = tf.assign(init, add_one)
# 定义一个将当前值加一并更新的运算
init_var = tf.global_variables_initializer()
# 定义一个变量初始化
with tf.Session() as sess:
    sess.run(init_var)
    #  初始化变量
    for i in range(3):
        print(sess.run(update), end="\t")
        # 输出每次加1并更新后的结果
# 结果为:
# 1 2   3
feed_dict传参

对于会话中的run()方法,一般都是将常量和初始化完成的变量传入运算,但其实也可以通过feed_dict参数将数值以字典方式传入,此时对于这些值,需要先通过tf.placeholder()方法创建占位符,然后再传入对应格式的数据,举例:

import tensorflow as tf
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
# 创建两个float型占位符
output = tf.multiply(input1, input2)
# 进行乘法运算
with tf.Session() as sess:
  print(sess.run([output], feed_dict={input1:7., input2:2.}))
  # 传入两个占位符的值分别为7.0和2.0
训练优化

tf.train(),其下提供了很多优化器,其中最简单的就是梯度下降.GradientDescentOptimizer()

会话操作

创建会话

sess = tf.Session()

执行运算

sess.run()
注:
如果只传入一个运算,那么当前会话会返回该运算执行完毕后对应的结果,但如果想进行多个运算并返回多个对应的结果,则可以通过一个列表将多个运算一起传入,结果也是一个列表,依次为每个运算的结果
注2:
当传入多个运算时,其将一起执行,而不是按传入顺序去执行,因此如果在一次run()里传入多个相同的运算,那么就相当于执行一次

关闭会话

sess.close()

简单综合示例

import tensorflow as tf
# 预测一个一元线性方程y=Wx+b的W和b的值,使其符合当x依次为1,2,3,4时,对应的y值依次为0,-1,-2,-3
W = tf.Variable(1., tf.float32)
b = tf.Variable(-1., tf.float32)
# 定义变量W和b,值分别为1.0和-1.0
x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
# 定义占位符,用于执行开始时的数据输入
init = tf.global_variables_initializer()
# 定义初始化变量
linear_model = W*x + b
# 定义y=Wx+b的一元线性方程模型
squared_deltas = tf.square(linear_model - y)
# 定义期望值和实际值之差的平方,用于后面的损失函数
loss = tf.reduce_sum(squared_deltas)
# 定义损失函数,值为所有计算差的平方和
optimizer = tf.train.GradientDescentOptimizer(0.01)
# 定义一个梯度下降的优化器,学习速率为0.01
train = optimizer.minimize(loss)
# 通过梯度下降方法尽可能使损失函数的值减小
with tf.Session() as sess:
    sess.run(init)
    # 初始化变量
    for i in range(1000):
        sess.run(train, {x: [1., 2., 3., 4.], y: [0., -1., -2., -3.]})
        # 训练1000次,并在这期间自动调整W和b的大小
    print(sess.run([W, b]))
    # 输出训练1000次后W和b的值:[-0.99999523, 0.999986](最完美的是W=-1,b=1,但不可能达到)

莫凡TensorFlow教程

https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/1-1-A-ANN-and-NN/

你或许想:《去原作者写文章的地方

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论