tensorflow框架整体结构

用张量tensor表示数据;计算图graph表示任务;在会话session中执行context; 
通过变量维护状态;通过feed和fetch可以任意的操作(arbitrary operation)、赋值、获取数据

TensorFlow的基本使用(基本结构、变量管理、模型持久化)

一.TensorFlow的基本结构

#1.创建计算节点
a = tf.constant([1.2, 1.2], name='a')
b = tf.constant([1.0, 1.0], name='b')
result = tf.add(a,b,name='add');
#输出运算节点信息
print(result)
#2.创建会话
sess = tf.Session()
#3.运行计算图
print( sess.run(result) )
#计算张量的值
print( result.eval(session = sess) )
#4.关闭会话,释放资源
sess.close()

#1.创建计算节点
a = tf.constant([1.2, 1.2], name='a')
b = tf.constant([1.0, 1.0], name='b')
result = tf.add(a,b,name='add');
#输出运算节点信息
print(result)
#2.创建会话,通过python的上下文管理这个会话,上下文退出时会话关闭和资源释放自动完成
sess = tf.Session()
with sess.as_default():
#3.运行计算图
print( sess.run(result) )
#计算张量的值
print( result.eval() )
基于TensorFlow线性回归算法的使用,训练集为鸢尾花的两个特征!!!

#基于TensorFlow线性回归算法的使用,训练集为鸢尾花的两个特征
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets

#获得数据集
iris = datasets.load_iris().data
print(type(iris))
train = np.array([arr[3]for arr in iris])#花瓣宽度特征
label = np.array([arr[0]for arr in iris])#花瓣长度特征

#1.创建计算节点
#定义占位变量
x_data = tf.placeholder(shape = [None,1], dtype = tf.float32)
y_data = tf.placeholder(shape = [None,1], dtype = tf.float32)

w = tf.Variable(tf.random_normal([1,1]))
b = tf.Variable(tf.random_normal([1,1]))

#决策函数
y = tf.add(tf.matmul(x_data, w), b)

#均方差损失函数
loss = tf.reduce_mean(tf.square(y_data - y))

#优化算法
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)

#2.创建会话
sess = tf.Session()

#3.运行计算图
init = tf.global_variables_initializer()
sess.run(init)

steps = 500
batch = 5

for i in range(steps):
#获得batch的训练集和标签集
rand_index = np.random.choice(len(train), size = batch)
rand_x = np.transpose([train[rand_index]])
rand_y = np.transpose([label[rand_index]])
#训练模型参数
sess.run(train_step, feed_dict = {x_data:rand_x,y_data:rand_y})
if i%30==0:
print(sess.run(loss, feed_dict = {x_data:rand_x,y_data:rand_y}))

#获得模型参数
[weight] = sess.run(w)
[bias] = sess.run(b)

#获得拟合结果
result = []
for i in train:
result.append(i*weight+bias)

#绘制拟合结果
plt.plot(train, label, 'o', label = 'points')
plt.plot(train, result, 'r-', label = 'result', linewidth=1)
plt.xlabel('x')
plt.ylabel('y')
plt.show()

#4.结束会话
sess.close()
二.TensorFlow的变量管理

#创建变量,两种方式等价
v1 = tf.get_variable("v1", shape=[1], initializer=tf.constant_initializer(1.0))
# v1 = tf.Variable( tf.constant(1.0, shape=[1]), name='v1' )
print( "变量名称:", v1.name )

#生成上下文管理器,同时创建命名空间,在命名空间内创建变量
with tf.variable_scope("space", reuse=False):
v2 = tf.get_variable("v2", shape=[1], initializer=tf.constant_initializer(1.0))
#在命名空间创建的变量,在变量名称前会加入命名空间的名称
print( "变量名称:", v2.name )# :0便是这个变量时生成变量这个运算的第一个结果

#嵌套命名空间,内层如果不指定reuse参数时,将会与外层reuse参数相同
with tf.variable_scope("space_"):
#获得reuse参数
print( tf.get_variable_scope().reuse )
v4 = tf.get_variable("v2", shape=[1])
print( v4.name )

#生成上下文管理器,在命名空间内获取已经创建过的变量
with tf.variable_scope("space", reuse=True):
v3 = tf.get_variable("v2", shape=[1])

#创建一个名称为空的命名空间
with tf.variable_scope("", reuse=True):
#通过带命名空间名称的变量名获取其命名空间下的变量
v5 = tf.get_variable( "space/v2", shape=[1] )

#初始化变量
init = tf.initialize_all_variables()

#创建会话
with tf.Session() as sess:
sess.run( init )
print( sess.run( v1 ) )
print( sess.run( v2 ) )
print( sess.run( v3 ) )
print( sess.run( v4 ) )
print( sess.run( v5 ) )
三.TensorFlow模型持久化
import tensorflow as tf

#问题:保存TensorFlow模型
#创建变量
v1 = tf.Variable( tf.constant(1.0, shape=[1]), name='v1' )
v2 = tf.Variable( tf.constant(2.0, shape=[1]), name='v2' )
result = v1 + v2

#初始化变量
init = tf.initialize_all_variables()
#声明tf.train.Saver类用于保存模型
saver = tf.train.Saver()

#创建会话
with tf.Session() as sess:
sess.run(init)
print( sess.run(result) )
#保存模型 model.ckpt.meta保存计算图的结构 model.ckpt保存每一个变量的取值
#checkpoint保存一个目录下所有的模型文件列表
saver.save( sess, "D:/Code_py/Neural/TensorFlow/model/model.ckpt" )

#问题:加载已经保存的TensorFlow模型
#声明变量
v1 = tf.Variable( tf.constant(1.0, shape=[1]), name='v1' )
v2 = tf.Variable( tf.constant(2.0, shape=[1]), name='v2' )
result = v1 + v2

#声明保存类
saver = tf.train.Saver()

#创建会话
声明变量
with tf.Session() as sess:
#不需要运行变量的初始化过程,直接加载已经保存的变量
saver.restore( sess, "D:/Code_py/Neural/TensorFlow/model/model.ckpt" )
print( sess.run(result) )

#问题:加载模型的同时变量重命名
#声明变量
v1 = tf.Variable( tf.constant(2.0, shape=[1]), name='other-v1' )
v2 = tf.Variable( tf.constant(2.0, shape=[1]), name='other-v2' )

#将原来名称为v1的变量加载到名称为'other-v1'变量v1中
#将原来名称为v2的变量加载到名称为'other-v2'变量v2中
saver = tf.train.Saver( {"v1":v1, "v2":v2} )

#创建会话
with tf.Session() as sess:
#不需要运行变量的初始化过程,直接加载已经保存的变量
saver.restore( sess, "D:/Code_py/Neural/TensorFlow/model/model.ckpt" )
print( sess.run(v1) )
所用知识:

1.TensorFlow分为两个阶段:

1)定义计算图中的计算;

2)执行计算;

2.TensorFlow中所有的数据都通过张量的形式来表示,零阶张量是标量,一阶张量是向量,n阶张量是n维数组。张量中并没有真正保存数字,保存的是如何得到这些数字的计算过程。一个张量保存了三个属性:name,shape,type。

总而言之,计算图上的每一个节点代表一个运算,计算的结果保存在张量之中。

3.TensorFlow目前支持的所有随机数生成器:

tf.random_normal() 正态分布

tf.truncated_normal() 正态分布,随机出来的值偏离平均值超过两个标准差,此数重新随机

tf.random_uniform() 均匀分布

tf.random_gamma() Gamma分布

4.TensorFlow常用的优化算法:

tf.train.GradientDescentOptimizer()

tf.train.AdamOptimizer()

tf.train.MomentumOptimizer()

5.tf提供了通过变量名称来创建或者获取一个变量的机制。通过这个机制,在不同的函数中可以直接通过变量的名字来使用变量,而不需要将变量通过形参的形式传递到函数内。此机制通过tf.get_variable() tf.variable_scope()函数实现。

tf.get_variable()用来创建或者获取变量。当其用于创建变量时,和tf.Variable()功能一样;当其用于获取已经创建的变量时,需要通过tf.variable_scope()函数来生成一个上下文管理器,在此管理器中,tf.get_variable()将直接获取已经创建的变量。

参考资料:

1.《TensorFlow实战Google深度学习框架》

2.TensorFlow实现线性回归 https://blog.csdn.net/lilongsy/article/details/79360458

3.Saver的用法 https://blog.csdn.net/u011500062/article/details/51728830
---------------------
转载自:
原文:https://blog.csdn.net/attitude_yu/article/details/80006243

tensorflow基础重新巩固的更多相关文章

  1. TensorFlow基础

    TensorFlow基础 SkySeraph  2017 Email:skyseraph00#163.com 更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com Over ...

  2. TensorFlow基础笔记(0) 参考资源学习文档

    1 官方文档 https://www.tensorflow.org/api_docs/ 2 极客学院中文文档 http://www.tensorfly.cn/tfdoc/api_docs/python ...

  3. TensorFlow基础笔记(3) cifar10 分类学习

    TensorFlow基础笔记(3) cifar10 分类学习 CIFAR-10 is a common benchmark in machine learning for image recognit ...

  4. TensorFlow基础剖析

    TensorFlow基础剖析 一.概述 TensorFlow 是一个使用数据流图 (Dataflow Graph) 表达数值计算的开源软件库.它使 用节点表示抽象的数学计算,并使用 OP 表达计算的逻 ...

  5. 05基于python玩转人工智能最火框架之TensorFlow基础知识

    从helloworld开始 mkdir mooc # 新建一个mooc文件夹 cd mooc mkdir 1.helloworld # 新建一个helloworld文件夹 cd 1.helloworl ...

  6. tensorflow基础篇-1

    1.使用占位符和变量 import tensorflow as tf import numpy as np #-----创建变量并初始化----------- def first(): my_var= ...

  7. TensorFlow应用实战 | TensorFlow基础知识

    挺长的~超出估计值了~预计阅读时间20分钟. 从helloworld开始 mkdir 1.helloworld cd 1.helloworldvim helloworld.py 代码: # -*- c ...

  8. tensorflow基础练习:线性模型

    TensorFlow是一个面向数值计算的通用平台,可以方便地训练线性模型.下面采用TensorFlow完成Andrew Ng主讲的Deep Learning课程练习题,提供了整套源码. 线性回归 多元 ...

  9. TensorFlow 基础概念

    初识TensorFlow,看了几天教程后有些无聊,决定写些东西,来夯实一下基础,提供些前进动力. 一.Session.run()和Tensor.eval()的区别: 最主要的区别就是可以使用sess. ...

  10. TensorFlow 基础知识

    参考资料: 深度学习笔记目录 向机器智能的TensorFlow实践 TensorFlow机器学习实战指南 Nick的博客 TensorFlow 采用数据流图进行数值计算.节点代表计算图中的数学操作,计 ...

随机推荐

  1. hive的数据定义之创建数据库和表

    1.对数据库的操作 create database hive_db //创建数据库hive_db create table hive_db.test(字段内容及其格式省略) //在数据库hive_db ...

  2. 每天一个linux命令:less(14)

    less less命令的作用与more十分相似,都可以用来浏览文字档案的内容,less 在查看之前不会加载整个文件 .用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页. ...

  3. 英语单词collaboration

    collaboration 来源——github网站 https://guides.github.com/activities/hello-world/ GitHub is the best way ...

  4. Maven开始

    1:加入Maven插件: 这句话的意思是: 从本地仓库找到相应的jar包 <localRepository>F:\RepMaven</localRepository 2:创建一个Ma ...

  5. webservice文件上传下载(byte[] 实现方式)

    测试环境:axis2-1.6.1.6.0.20.jdk1.5 说明:本方式仅适用于文件小于10M的场景(否则会出现内存溢出),大文件的上传下载应另选其他方式. 1.创建要发布成webservice的j ...

  6. LOJ 2303 「NOI2017」蚯蚓排队——链表+哈希表

    题目:https://loj.ac/problem/2303 想到合并的时候可以只考虑接口附近的50个,但不太会分析复杂度,而且没有清楚地想到用哈希值对应个数. 看了题解才会…… 一直想用 splay ...

  7. [CSP-S模拟测试]:公园(BFS+剪枝)

    题目传送门(内部题31) 输入格式 第一行,五个整数$V,M,N,E,L$.接下来$M$行,每行两个正整数$s_i,a_i$.保证$s_i$互不相等.接下来$N$行,每行两个正整数$t_j,b_j$. ...

  8. [CSP-S模拟测试]:party?(霍尔定理+最小割+树链剖分)

    题目描述 $Treeland$国有$n$座城市,其中$1$号城市是首都,这些城市被一些单向高铁线路相连,对于城市$i\neq 1$,有一条线路从$i$到$p_i(p_i<i)$.每条线路都是一样 ...

  9. python中对列表元素大小排序(冒泡排序法和选择排序法)

    前言:排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列.本文主要讲述python中经常用的两种排序算法,选择排序法 ...

  10. 2018-2019-2 网络对抗技术 20165206 Exp 8 Web基础

    - 2018-2019-2 网络对抗技术 20165206 Exp 8 Web基础 - 实验任务 (1).Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GE ...