#%%
# 使用 jupyter notebook 编写
"""
本章知识目录:
1.TensorFlow的特点
2.基本概念
3.计算图——Graph
4.会话——Session
5.张量——Tensor
6.变量——Variable
7.占位符——Placeholders
8.卷积神经网络
"""
# TensorFlow版本为1.13.2,如果是2.0及以上版本,部分程序可能运行不了
"""
考试:
概念:什么是计算图Graph、会话Session、张量Tensor(最重点,属性,秩,每个维度的张量叫什么名字,如0维纯量,1维向量,2二维矩阵)
给一张图,张量,为节点赋值
变量的创建和使用
占位符的使用
如何运用到神经网络,卷积的参数(一定要搞清楚)
特别是卷积层(重点)
池化层
PPT中的例子
(概念、填空、选择、写程序)都有可能
"""
import tensorflow as tf
#%%
"""
TensorFlow的特点:
1、真正的可移植性
引入各种计算设备的支持包括CPU/GPU/TPU,以及能够很好地运行在移动端,
如安卓设备、ios、树莓派等等
2、多语言支持
Tensorflow 有一个合理的c++使用界面,也有一个易用的python使用界面来构建和
执行你的graphs,你可以直接写python/c++程序。
3、高度的灵活性与效率
TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源软件库
能够灵活进行组装图,执行图。随着开发的进展,Tensorflow的效率不算在提高
4、支持TensorFlow 由谷歌提供支持,谷歌投入了大量精力开发 TensorFlow,它希望
TensorFlow 成为机器学习研究人员和开发人员的通用语言
基本概念:
TensorFlow核心程序由2个独立部分组成:
a:Building the computational graph构建计算图
b:Running the computational graph运行计算图
计算图是一系列的TensorFlow操作排列成一个有向无环图。
"""
#%%
"""
计算图——Graph:
计算图是由一系列的tensorflow的操作组成,并且这些操作编配成计算图的节点。 站在计算图的角度,你可以认为tensorflow程序是有相对独立的两部分组成。构建计算图、运行计算图。
"""
node1 = tf.constant(3.0, dtype=tf.float32)
node2 = tf.constant(4.0)
print(node1, node2)
#%%
"""
会话——Session:
1.TensorFlow 的 运行模型 为 session(会话),通过会话来执行计算图TensorFlow 使用会话的方式主要有如下两种模式:
a).sess = tf.Session() sess.run(...) sess.close()
b).使用上下文管理器
with tf.Session() as sess:
sess.run(...)
2.会话的run方法
run(fetches, feed_dict=None,graph=None)
运行ops和计算tensor
嵌套列表,元组,
namedtuple,dict或OrderedDict(重载的运算符也能运行)
feed_dict 允许调用者覆盖图中指定张量的值,提供给
placeholder使用
返回值异常
RuntimeError:如果它Session处于无效状态(例如已关闭)。
TypeError:如果fetches或feed_dict键是不合适的类型。
ValueError:如果fetches或feed_dict键无效或引用 Tensor不存在。
"""
#%%
"""
张量——Tensor:
1.张量的秩和数据类型
2.张量操作
"""
#%%
"""
tensor:张量是tensorflow核心的基本数据单元。 张量是一个多维数组。
rank:张量的秩,就是张量的维数。
shape:描述张量的形状。
计算方法:去掉中括号,逗号+1就是数组的值。数组的的长度是rank。
[1., 2., 3.] # a rank 1 tensor; a vector with shape [3]
[[1., 2., 3.], [4., 5., 6.]] # a rank 2 tensor; a matrix with shape [2, 3]
[[[1., 2., 3.]], [[7., 8., 9.]]] # a rank 3 tensor with shape [2, 1, 3]
"""
#%%
"""
张量的阶:
阶 数学实例 Python
0 纯量 只有大小
1 向量 大小和方向
2 矩阵 数据表
3 3阶张量 数据立体
n n阶张量 …………
"""
#%%
"""
张量属性:
graph 张量所属的默认图
op 张量的操作名
name 张量的字符串描述
shape 张量形状
"""
print(tf.__version__)
node1 = tf.constant(3.0)
node2 = tf.constant(4.0)
sum = node1 + node2
with tf.Session() as sess:
print(sum.eval())
print("===")
print(sum.graph)
print("===")
print(sum.op)
print("===")
print(sum.name)
print(sess.run(sum))
#%%
"""
变量——Variable:
1.当训练模型时,用变量来 存储和更新参数。建模时它们需要被明确地初始化,当创建一个变量时,需要将一个张量作为初始值传入构造函数Variable()。
2.初始化方式:
with tf.Session() as sess:
sess.run(weights.initializer)
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
3.变量也是一种OP,是一种特殊的张量,能够进行存储持久化,它的值就是张量。是在模型训练中,允许修改的量。相同的输入,通过修改变量得到不同输出值。
4.变量的创建:
tf.Variable(initial_value=None,name=None)
创建一个带值initial_value的新变量
assign(value)
为变量分配一个新值,返回新值
eval(session=None)
计算并返回此变量的值
name
属性表示变量名字
"""
W = tf.Variable([.3], dtype=tf.float32)
b = tf.Variable([-.3], dtype=tf.float32)
x = tf.placeholder(tf.float32)
linear_model = W*x + b
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
print(sess.run(linear_model, {x: [1, 2, 3, 4]}))
#%%
"""
占位符——Placeholders:
placeholders:在计算图中,能够接受额外输入,通常情况下,提供的值晚于定义。
意义:在程序执行的时候,不确定输入的是什么,提前“占个坑”
"""
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b
print(sess.run(adder_node, {a: 3, b: 4.5}))
print(sess.run(adder_node, {a: [1, 3], b: [2, 4]}))
sess.close()
#%%
"""
一个计算图可以参数化的接收外部的输入,作为一个placeholder(占位符),在计算时需要提供一个字典feed_dict来指定placeholder的取值。
"""
input1 = tf.placeholder(tf.float32) #占位符
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1, input2)
with tf.Session() as sess:
print(sess.run(output, feed_dict={input1:3.0, input2:2.0}))
#%%
"""
卷积神经网络:
1.卷积神经网络(Convolutional Neural Network, CNN)由三部分构成。第一部分是输入层。第二部分由n个卷积层和池化层的组合组成。第三部分由一个全连结的多层感知机分类器构成。这一结构使得卷积神经网络天然适合处理二维特征数据。
2.卷积层
对图像和滤波矩阵做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。卷积的主要目的是为了从输入图像中提取特征。卷积可以通过从输入的一小块数据中学到图像的特征,并可以保留像素间的空间关系。
filter_weight = tf.Variable(tf.truncated_normal(shape, stddev=0.1))
conv = tf.nn.conv2d(x, filter_weight, strides = [1, 2, 2, 1], padding = ‘SAME’)
第1个参数对应一个输入batch; 第2个参数提供卷积层的权重;第3个参数为不同维度上的步长,其中第一维和最后一维一定为1,因为卷积层的步长只对矩阵的长和宽有效;最后一个是填充方式。
3.池化层
池化,简言之,即取区域平均或最大
池化有两种:
一种是最大池化,在选中区域中找最大的值作为抽样后的值;
一种是平均值池化,把选中的区域中的平均值作为抽样后的值。
pool = tf.nn.avg_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
参数和卷积函数类似 最大池化:tf.nn.max_pool
4.dropout
在模型训练时按照一定的概率 暂时让网络某些隐含层节点的权重不工作(也称丢弃),作用是防止过拟合。
TensorFlow中,可以用一个placeholder来代表 dropout 的概率。这样我们可以在训练过程中启用dropout,在测试过程中关闭dropout。
如:
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
keep_prob = tf.placeholder("float")
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
"""
山东大学Python(16)——TensorFlow
猜你喜欢
转载自blog.csdn.net/weixin_43360801/article/details/103325760
今日推荐
周排行