深度学习04-(Tensorflow简介、图与会话、张量基本操作、Tensorboard可视化、综合案例:线性回归)
深度学习04-Tensorflow
深度学习04-(Tensorflow)
Tensorflow概述

Tensorflow简介
什么是Tensorflow

Tensorflow的特点

Tensorflow发展历史

Tensorflow安装



案例1:快速开始
# tf的helloworld程序
import tensorflow as tf
hello = tf.constant('Hello, world!') # 定义一个常量
sess = tf.Session() # 创建一个session
print(sess.run(hello)) # 计算
sess.close()
案例2:张量相加
# 常量加法运算示例
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 调整警告级别
a = tf.constant(5.0) # 定义常量a
b = tf.constant(1.0) # 定义常量a
c = tf.add(a, b)
print("c:", c)
graph = tf.get_default_graph() # 获取缺省图
print(graph)
with tf.Session() as sess:
print(sess.run(c)) # 执行计算
Tensorflow体系结构
体系结构概述

单机模式与分布式模式

后端逻辑层次

基本概念
张量

数据流

操作

图和会话

变量和占位符

Tensorflow基本使用

图和会话操作
什么是图

案例3:查看图对象
# 常量加法运算示例
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 调整警告级别
a = tf.constant(5.0) # 定义常量a
b = tf.constant(1.0) # 定义常量a
c = tf.add(a, b)
print("c:", c)
graph = tf.get_default_graph() # 获取缺省图
print(graph)
with tf.Session() as sess:
print(sess.run(c)) # 执行计算
print(a.graph) # 通过tensor获取graph对象
print(c.graph) # 通过op获取graph对象
print(sess.graph) # 通过session获取graph对象
会话及相关操作


案例4:指定会话运行某个图
# 创建多个图,指定图运行
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 调整警告级别
a = tf.constant(5.0) # 定义常量a
b = tf.constant(1.0) # 定义常量a
c = tf.add(a, b)
graph = tf.get_default_graph() # 获取缺省图
print(graph)
graph2 = tf.Graph()
print(graph2)
with graph2.as_default(): # 在指定图上创建op
d = tf.constant(11.0)
with tf.Session(graph=graph2) as sess:
print(sess.run(d)) # 执行计算
# print(sess.run(c)) # 报错
会话常见的错误及原因

张量及基本运算
张量的阶与形状

张量的数据类型

张量常用属性

案例5:查看张量属性
# 创建多个图,指定图运行
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 调整警告级别
# a = tf.constant(5.0) # 定义常量a
# a = tf.constant([1,2,3])
a = tf.constant([[1,2,3],[4,5,6]])
with tf.Session() as sess:
print(sess.run(a)) # 执行计算
print("name:", a.name)
print("dtype:", a.dtype)
print("shape:", a.shape)
print("op:", a.op)
print("graph:", a.graph)
案例6:生成张量
# 创建张量操作
import tensorflow as tf
# 生成值全为0的张量
tensor_zeros = tf.zeros(shape=[2, 3], dtype="float32")
# 生成值全为1的张量
tensor_ones = tf.ones(shape=[2, 3], dtype="float32")
# 创建正态分布张量
tensor_nd = tf.random_normal(shape=[10],# 形状,1维10个元素
mean=1.7, # 期望值
stddev=0.2,# 标准差
dtype="float32")# 元素类型
# 生成和输入张量形状一样的张量,值全为1
tensor_zeros_like = tf.zeros_like(tensor_ones)
with tf.Session() as sess:
print(tensor_zeros.eval()) # eval表示在session中执行并返回值 等价于sess.run(tensor_zeros)
print(tensor_ones.eval())
print(tensor_nd.eval())
print(tensor_zeros_like.eval())
张量类型转换

案例7:张量类型转换
# 张量类型转换
import tensorflow as tf
tensor_ones = tf.ones(shape=[2, 3], dtype="int32")
tensor_float = tf.constant([1.1, 2.2, 3.3])
with tf.Session() as sess:
print(tf.cast(tensor_ones, tf.float32).eval())
# print(tf.cast(tensor_float, tf.string).eval()) #不支持浮点数到字符串直接转换
占位符

案例8:占位符使用
# 占位符示例
import tensorflow as tf
# 不确定数据,先使用占位符占个位置
plhd = tf.placeholder(tf.float32, [2, 3]) # 2行3列的tensor
plhd2 = tf.placeholder(tf.float32, [None, 3]) # N行3列的tensor
with tf.Session() as sess:
d = [[1, 2, 3],
[4, 5, 6]]
print(sess.run(plhd, feed_dict={plhd: d}))
print("shape:", plhd.shape)
print("name:", plhd.name)
print("graph:", plhd.graph)
print("op:", plhd.op)
print(sess.run(plhd2, feed_dict={plhd2: d}))
张量形状改变

案例9:修改张量形状
# 改变张量形状示例(重点)
import tensorflow as tf
pld = tf.placeholder(tf.float32, [None, 3])
print(pld)
pld.set_shape([4, 3])
print(pld)
# pld.set_shape([3, 3]) #报错,静态形状一旦固定就不能再设置静态形状
# 动态形状可以创建一个新的张量,改变时候一定要注意元素的数量要匹配
new_pld = tf.reshape(pld, [3, 4])
print(new_pld)
# new_pld = tf.reshape(pld, [2, 4]) # 报错,元素的数量不匹配
with tf.Session() as sess:
pass
张量数学计算


案例10:张量数学计算
# 数学计算示例
import tensorflow as tf
x = tf.constant([[1, 2], [3, 4]], dtype=tf.float32)
y = tf.constant([[4, 3], [3, 2]], dtype=tf.float32)
x_add_y = tf.add(x, y) # 张量相加
x_mul_y = tf.matmul(x, y) # 张量相乘
log_x = tf.log(x) # log(x)
# reduce_sum: 此函数计算一个张量的各个维度上元素的总和
x_sum_1 = tf.reduce_sum(x, axis=[1]) #0-列方向 1-行方向
# segment_sum: 沿张量的片段计算总和
# 函数返回的是一个Tensor,它与data有相同的类型,与data具有相同的形状
# 但大小为 k(段的数目)的维度0除外
data = tf.constant([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype=tf.float32)
segment_ids = tf.constant([0, 0, 0, 1, 1, 2, 2, 2, 2, 2], dtype=tf.int32)
x_seg_sum = tf.segment_sum(data, segment_ids) # [6, 9, 40]
with tf.Session() as sess:
print(x_add_y.eval())
print(x_mul_y.eval())
print(x_mul_y.eval())
print(log_x.eval())
print(x_sum_1.eval())
print(x_seg_sum.eval())
变量
- 变量是一种op,它的值是张量
- 变量能够持久化保存,普通张量则不可
- 当定义一个变量时,需要再会话中进行初始化
- 变量创建
tf.Variable(initial_value=None,name=None)
案例11:变量的使用
# 变量OP示例
import tensorflow as tf
# 创建普通张量
a = tf.constant([1, 2, 3, 4, 5])
# 创建变量
var = tf.Variable(tf.random_normal([2, 3], mean=0.0, stddev=1.0),
name="variable")
# 变量必须显式初始化, 这里定义的是初始化操作,并没有运行
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_op)
print(sess.run([a, var]))
Tensorboard可视化

Tensorboard工具
什么是可视化

启动tensorboard

注意事项:
- 启动Tensorboard时, 路径最好写成绝对路径
- 如果是windows, 进入python安装目录下scirpts:
tensorboard-- logdir=”C: \ \ summary \”
路径写成双反斜杠 - 在浏览器中访问时,输入: localhost : 6006
不要输入: 127.0. 0. 1 : 6006 - 如果所有的选项下都没有数据,默认会隐藏在inactive中
- 如果Tensorboard没办法运行,先装一个高版本尝试
如果还是不行,再装一个低版本的尝试
tensorboard主页说明

案例12:为操作添加可视化
# 变量OP示例
import tensorflow as tf
''' 变量OP
1. 变量OP能够持久化保存,普通张量则不可
2. 当定义一个变量OP时,在会话中进行初始化
3. name参数:在tensorboard使用的时候显示名字,可以让相同的OP进行区分
'''
# 创建普通张量
a = tf.constant([1, 2, 3, 4, 5])
# 创建变量
var = tf.Variable(tf.random_normal([2, 3], mean=0.0, stddev=1.0),
name="variable")
b = tf.constant(3.0, name="a")
c = tf.constant(4.0, name="b")
d = tf.add(b, c, name="add")
# 变量必须显式初始化, 这里定义的是初始化操作,并没有运行
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_op)
# 将程序图结构写入事件文件
fw = tf.summary.FileWriter("../summary/", graph=sess.graph)
print(sess.run([a, var]))

- 注:张量如果未使用默认情况下不显示
摘要与事件文件操作

综合案例:实现线性回归
案例13:实现线性回归

# 线性回归示例
import tensorflow as tf
# 第一步:创建数据
x = tf.random_normal([100, 1], mean=1.75, stddev=0.5, name="x_data")
y_true = tf.matmul(x, [[2.0]]) + 5.0 # 矩阵相乘必须是二维的
# 第二步:建立线性回归模型
# 建立模型时,随机建立权重、偏置 y = wx + b
# 权重需要不断更新,所以必须是变量类型. trainable指定该变量是否能随梯度下降一起变化
weight = tf.Variable(tf.random_normal([1, 1], name="w"),
trainable=True) # 训练过程中值是否允许变化
bias = tf.Variable(0.0, name="b", trainable=True) # 偏置
y_predict = tf.matmul(x, weight) + bias # 计算 wx + b
# # 第三步:求损失函数,误差(均方差)
loss = tf.reduce_mean(tf.square(y_true - y_predict))
# # 第四步:使用梯度下降法优化损失
# 学习率是比价敏感的参数,过小会导致收敛慢,过大可能导致梯度爆炸
train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
#### 收集损失值
tf.summary.scalar("losses", loss)
merged = tf.summary.merge_all() #将所有的摘要信息保存到磁盘
init_op = tf.global_variables_initializer()
with tf.Session() as sess: # 通过Session运行op
sess.run(init_op)
# 打印初始权重、偏移值
print("weight:", weight.eval(), " bias:", bias.eval())
#### 指定事件文件
fw = tf.summary.FileWriter("../summary/", graph=sess.graph)
for i in range(500): # 循环执行训练
sess.run(train_op) # 执行训练
summary = sess.run(merged) #### 运行合并摘要op
fw.add_summary(summary, i) #### 写入文件
print(i, ":", i, "weight:", weight.eval(), " bias:", bias.eval())


深度学习04-(Tensorflow简介、图与会话、张量基本操作、Tensorboard可视化、综合案例:线性回归)的更多相关文章
- 深度学习(TensorFlow)环境搭建:(三)Ubuntu16.04+CUDA8.0+cuDNN7+Anaconda4.4+Python3.6+TensorFlow1.3
紧接着上一篇的文章<深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动>,这篇文章,主要讲解如何安装CUDA+CUDNN,不过前提是我们是已经把N ...
- 深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动
前几天把刚拿到了2台GPU机器组装好了,也写了篇硬件配置清单的文章——<深度学习(TensorFlow)环境搭建:(一)硬件选购和主机组装>.这两台也在安装Ubuntu 16.04和108 ...
- Ubuntu16.04搭建深度学习框架——TensorFlow
TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库,说白了,就是一个库. 小编自己在Ubuntu搭建了深度学习框架TensorFlow,感觉挺简单,现 ...
- 截图:【炼数成金】深度学习框架Tensorflow学习与应用
创建图.启动图 Shift+Tab Tab 变量介绍: F etch Feed 简单的模型构造 :线性回归 MNIST数据集 Softmax函数 非线性回归神经网络 MINIST数据集分类器简单版 ...
- 深度学习与TensorFlow
深度学习与TensorFlow DNN(深度神经网络算法)现在是AI社区的流行词.最近,DNN 在许多数据科学竞赛/Kaggle 竞赛中获得了多次冠军. 自从 1962 年 Rosenblat 提出感 ...
- 深度学习之TensorFlow构建神经网络层
深度学习之TensorFlow构建神经网络层 基本法 深度神经网络是一个多层次的网络模型,包含了:输入层,隐藏层和输出层,其中隐藏层是最重要也是深度最多的,通过TensorFlow,python代码可 ...
- 【原创 深度学习与TensorFlow 动手实践系列 - 3】第三课:卷积神经网络 - 基础篇
[原创 深度学习与TensorFlow 动手实践系列 - 3]第三课:卷积神经网络 - 基础篇 提纲: 1. 链式反向梯度传到 2. 卷积神经网络 - 卷积层 3. 卷积神经网络 - 功能层 4. 实 ...
- 分享《机器学习实战基于Scikit-Learn和TensorFlow》中英文PDF源代码+《深度学习之TensorFlow入门原理与进阶实战》PDF+源代码
下载:https://pan.baidu.com/s/1qKaDd9PSUUGbBQNB3tkDzw <机器学习实战:基于Scikit-Learn和TensorFlow>高清中文版PDF+ ...
- 深度学习(TensorFlow)环境搭建:(一)硬件选购和主机组装
一.硬件采购 近年来,人工智能AI越来越多被人们所了解,尤其是AlphaGo的人机围棋大战之后,机器学习的热潮也随之高涨.最近,公司采购了几批设备,通过深度学习(TensorFlow)来研究金融行业相 ...
- 深度学习之TensorFlow安装与初体验
深度学习之TensorFlow安装与初体验 学习前 搞懂一些关系和概念 首先,搞清楚一个关系:深度学习的前身是人工神经网络,深度学习只是人工智能的一种,深层次的神经网络结构就是深度学习的模型,浅层次的 ...
随机推荐
- websocket 数据分析
WebSocket是一种通过单个TCP连接提供全双工通信信道的协议.2011年,IETF将WebSocket协议标准化为RFC 6455,W3C正在对Web IDL中的WebSocket API进行标 ...
- 【MSSQL】远程打开对象
opendatasource https://docs.microsoft.com/zh-cn/sql/t-sql/functions/opendatasource-transact-sql?view ...
- Nginx lavarel框架伪静态配置
location / { try_files $uri $uri/ /index.php$is_args$query_string; }
- Linux 基础命令2
一.输出重定向命令 : > />> 1.ls > 1.txt 把命令返回的结果输出到文件中,会覆盖之前的数据,默认情况命令返回的结果显示在屏幕中: 2.Ls >1.txt ...
- 在 Sitecore 里使用 Solr 搜索 SortOrder 关联的 Item
在 C# 使用 Solr 搜索 sitecore 的配置信息文件可直接丢进 <Instance>\App_Config 下,sitecore 会自动检测配置文件更新并加载到内存中. 通常情 ...
- Java笔记第十一弹
TCP通信程序 TCP发送数据 //需要进行三次握手 import java.io.*; public class Main{ public static void main(String[] arg ...
- 11.4 显示窗口(harib08d)11.5 小实验(hearib08e) 11.6 高速计数器(harib08f)
11.4 显示窗口(harib08d) 书P206 11.5 小实验(hearib08e) 书P208 11.6 高速计数器(harib08f) 书P209
- 程序员必须掌握的java进制转换(全网最详细讲解)
前言 在上一篇文章中,壹哥给大家讲了Java里的各种运算符.其中在讲解位运算符时,我给大家提到了计算机中进制的概念.但是现在很多小白同学,对进制的概念还不够了解,比如二进制.八进制.十六进制都是怎么回 ...
- ros系统(1)
在虚拟机上安装好ros系统之后,打开终端,启动ROS Master,输入roscore命令,结果如下: 再启动小海龟仿真器,输入命令:rosrun turtlesim turtlesim_node,结 ...
- 大数据面试——HDFS
一.Hadoop1.0 与 Hadoop2.0的区别