【从零开始深度学习】——1、初识Tensorflow

什么是Tensorflow

Tensor:张量,或表示多维数组。对于不同维度下的定义不同:对于0矩阵,Tensor就是一个数“0”;而在一维情况下就是一维数组,高维情况下就是高维矩阵。
Flow:起飞的意思,体现TensorFlow的计算模型。

而TensorFlow的一切都是围绕图结构开始的。计算图是Tensorflow中最基本的概念,也是它有别于Numpy等python工具包之处。TensorFlow中的所有计算都会被转化为计算图上的节点,依据节点与节点之间的连接来实现值之间的传递。

一个简单的例子:

import tensorflow as tf
a = tf.constant([1.0,2.0], name = "a" )
b = tf.constant([2.0,3.0], name = "b" )
c = tf.add(a,b, name = "add")

print(a + b)
print(c)

这里两次输出的结果都是一样的,这也是张量计算的一个特点,他们不会直接给出a+b的结果,而是给出tensorflow内部的结构关系,或者说,在c中存储的是计算的过程/步骤
<tf.Tensor ‘add:0’ shape=(2,) dtype=float32>

显然从上述输出中不难看出,张量中保存了三个属性,分别是张量名字name=“add:0”(【注】:这里add:0表示的是c的结果是该张量上输出的第一个结果)、维度shape“2”和类型dtype=“float32”。


如果说,constant及相关的张量定义是为了用来将计算图结构描述出来的话,那么session(会话)便是对已经构造出来计算图的运算输出。

1、直接调用session

【目的】为了防止错误运行时候导致的资源泄露,或者保护同一个计算图中的运算过程,以及避免异常退出时资源释放的问题。
完整调用计算图的过程需要开始函数关闭函数,代码如下:

#需要大写S
sess = tf.Session()

#调用开始函数sess.run()
sess.run(result)

#输出result的结果
>>>array([3., 5.], dtype=float32)

#调用完成后关闭sess会话
sess.close()

2、使用Python的上下文管理器

利用with as来创建上下文管理器,在with语句内执行会话sess,具体的执行过程如下

with tf.Session() as sess:
    sess.run(c)

使用这种方法不需要调用Session.close()函数关闭会话。


3、激活tensorflow,初始化变量

以下代码需要放在主程序的前面,用于激活tf并且初始化变量

sess = tf.InteractiveSession()
init = tf.global_variables_initializer()
sess.run(init)

下面举例参考博主zzZ_CMing的博客内容,利用tf框架实现线性回归

import tensorflow as tf
import numpy as np
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

#初始化:随机生成输入数据X,得到对应真实值Y
X = np.random.rand(100).astype(np.float32)
Y = X*0.1+0.3

"""
### tensorflow框架——开始
"""
#用随机数列生成的方式,得到结构是1维,范围在[-1,1]的权重
W = tf.Variable(tf.random_uniform([1],-1.0,1.0))
#用随机数列生成的方式,得到全0的偏置值
b = tf.Variable(tf.zeros([1]))
#预测值y
y = W*X+b

#计算预测值与真实值的误差
loss = tf.reduce_mean(tf.square(y - Y))
#梯度下降法:选择GradientDescentOptimizer优化器,学习率为0.5
train = tf.train.GradientDescentOptimizer(0.5).minimize(loss)

#tf框架:初始化变量
init = tf.global_variables_initializer()
"""
### tensorflow框架——结束(以上是对计算图部分的描述,下面才正式开始执行描述的内容)
"""

# 激活init
sess = tf.Session()
sess.run(init)

# 循环201次,从0至200,sess.run(train)即对train进行201次梯度下降过程
for i in range(201):
    sess.run(train)
    #每20次次输出一次结果,一共输出11个结果
    if i%20 == 0:
    	#输出此次的W和b值
        print(i,sess.run(W),sess.run(b))

以上的代码也许有不了解的地方,不过没有关系,这只是对tf框架的大致介绍,接下来的博客会一一展开来记录与解释。

发布了19 篇原创文章 · 获赞 2 · 访问量 9140

猜你喜欢

转载自blog.csdn.net/qq_25134999/article/details/83247902