“深度学习与实践” 笔记(二)

Homework2:

基础作业:

假设有函数y = cos(ax + b), 其中a为学号前两位(18),b为学号最后两位(22)。

import tensorflow as tf
x_train
stp= tf.constant(initialize name= ‘stepwise’)# 常量
a = 18
b = 22

  • 定义图

g = tf.Graph()
with g.as_default():
a= tf.constant(name= ‘a’)
b= tf.constant (name= ‘b’)
x= tf.placeholder # 占位节点
y= tf.cos(tf.add(tf.matmul(a,x),b))

1、
首先从此函数中以相同步长(点与点之间在x轴上距离相同),在0<(ax+b)<2pi范围内,采样出2000个点,

def linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None):
https://blog.csdn.net/zywvvd/article/details/78593618

然后利用采样的2000个点作为特征点进行三次函数拟合
(三次函数形式为 y = w1 * x + w2 * x^2 + w3 * x^3 + b, 其中wi为可训练的权值,b为可训练的偏置值,x和y为输入的训练数据 ) 。

要求使用TensorFlow实现三次函数拟合的全部流程。

拟合完成后,分别使用ckpt模式和PB模式保存拟合的模型。

然后,针对两种模型存储方式分别编写恢复模型的程序。两个模型恢复程序分别使用ckpt模式和PB模式恢复模型,并将恢复的模型参数(wi和b)打印在屏幕上,同时绘制图像(图像包括所有的2000个采样点及拟合的函数曲线)。

请提交文档,内容包括模型参数配置、程序运行截图、拟合的三次函数以及绘制的图像,同时提交三个python脚本文件:1. 函数拟合及两种模式的模型保存程序2. ckpt模型恢复程序,3. PB模型恢复程序。

进阶作业:

使用TensorFlow定义函数y = 1 - sin(x)/x, 并求解y达到最小值时对应的x
步骤提示:
(1) 使用TensorFlow给出函数定义
(2) 利用tf.train.GradientDescentOptimizer定义优化器
(3) 启动会话,用梯度下降算法训练一定的迭代次数,在每次迭代之后输出当前的x和y值

扫描二维码关注公众号,回复: 6237675 查看本文章

提交内容:
源码、运行截图和报告,报告中应包括有关的参数,如x的初始化方式、学习率、迭代次数等,以及每次迭代后的x和y的值。

课程复习

TensorFlow基本原理

  • 编程模型分为: 计算图Graph+会话Session
  • 计算图定义计算模型
    • e.g. :
      在这里插入图片描述
  • 节点 : 是计算符号 Operation ,如 加减乘除。
  • 连接节点的边:是计算的输出结果,或者是张量Tensor(n维数组),它是节点之间传递的数据。
  • 边缘点: 数据的输入, 和参数变量。
  • 计算过程需要组个节点激活,每个节点的激活需要前驱节点的激活

Graph 边缘点:输入/模型参数

  • tf.Variable : 变量节点
    (执行过程中需要更新的量, 存储权值)
  • tf.constant: 常量节点
    (建立计算图时确定, 传入python值 ,不能是tensor )
  • tf.placeholder:占位节点
    (在运行时要给占位节点feed一个值)
  • tf.zeros, tf.ones, tf.ones_like , tf.random, tf.zeros_like
    在这里插入图片描述
  • 定义计算图
  • 在这里插入图片描述
  1. Graph 的构建:使用 tf 中的数据结构和算子 (tf.xxx),把整个模 型的所有连接都写一遍
  2. Graph 构建的每个操作都要像函数一样执行一遍,否则无法建立 Graph
  3. 构建的 Graph 仅仅定义了计算流程,不会给出计算结果 (Python 中则可以直接得到计算结果)
  4. 要用 Graph 进行计算,需要在 Session 中给出输入和输出方式并 启动计算
    在这里插入图片描述
import tensorflow as tf
      v1 = tf.Variable(tf.random_uniform([3]))
      v2 = tf.Variable(tf.random_uniform([3]))
      sumV12 = tf.add(v1, v2)
      with tf.Session() as sess:
          sess.run(tf.initialize_all_variables())
          print(sess.run(v1))
          print(sess.run(v2))
          print(sess.run(sumV12))

GPU/CPU调用

  • 默认状态 : GPU:0
  • 查看当前使用的GPU还是CPU:(config=tf.ConfigProto(log_device_placement=True))
import tensorflow as tf

v1 = tf.constant([1.0, 2.0, 3.0], shape=[3], name='v1')
v2 = tf.constant([1.0, 2.0, 3.0], shape=[3], name='v2')
sumV12 = v1 + v2
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
     print sess.run(sumV12)

  • 手动指定GPU
  • with tf.device('/gpu:1')
  • 随机数生成
 a = tf.random_normal([1], name ='random')
with tf.Session() as sess:
    for i in range(5):
        print sess.run[a]

TensorFlow 机器学习编程框架

例子: 股票指数预测

在这里插入图片描述
在这里插入图片描述

Tensorflow 编程框架和机器学习模型的对应关系

在这里插入图片描述
在这里插入图片描述

TF优化机制

在这里插入图片描述

TF 优化编程模式

1、 定义目标函数 (如loss)

2、定义优化器 (基于目标函数和 优化目标)

opt = tf. train.GradientDescentOptimizer(0.01)
train_op= optminimize(loss) 

3、 使模型获取数据, 并调用优化器进行训练

sess.run([train_op...], feed_dict= input_x: xxx, label:xx)

在这里插入图片描述

Tensorflow 编程框架步骤

1、创建数据 , 定义输入输出

feed 和 fetch 是 TensorFlow 模型与外界进行数据交互的方式

在这里插入图片描述
在这里插入图片描述

股票模型案例

模型定义

在这里插入图片描述

1、定义输入

  • 首先定义placeholder:
data = tf.placeholder(tf.float32, [None,4])
real_label = tf.placeholder(tf.float32, [None,1])
  • 然后定义有关变量 ,并输入数据执行计算图: Y= W*data + b ,中的W和 b。

2、定义模型主要部分计算图

  • 参数在机器学习过程中 不断被调整, 一般用变量表示。
  • Graph : 变量是依附其 所属 操作节点 的终端节点
  • 变量 W\ b , 在使用前要进行初始化

变量定义的基本形式

w= tf.Variable(initial_value= np.random.randint(10,size=(2,1),name = 'col_vector',trainable = True))

在这里插入图片描述

3&4、定义损失函数 优化器和优化目标

y_label = tf.add(tf.matmul(data, weight), bias) # 定 义 回归函数的计算方法
loss = tf.reduce_mean(tf.square(real_label−y_label)) # 定义目标函数loss
train = tf.train.GradientDescentOptimizer(0.2).minimize (loss) # 定义优化器及优化目标(最小化loss), 其中0.2为 学习率

在这里插入图片描述

5、 初始化参数

在这里插入图片描述

  • TF常用初始化函数
tf.constant (const):常量初始化
tf.random_normal ():正态分布初始化
tf.truncated_normal (mean = 0.0, stddev = 1.0, seed = None, dtype =
dtypes.float32):截取的正态分布初始化 tf.random_uniform():均匀分布初始化
  • Python 初始化
initial_value=np.random.randint(10,size=(2,1)) initial_value=22
  • 注意: 即是用常量、随机数直接在变量定义时给定初始化值,变量 也此时也是没有值的,需要在 session 中运行初始化函数
全部初始化:tf.global_variables_initializer 部分初始化:tf.variables_initializer([a,b,...]) ...

init=tf.global_variables_initializer() 
sess.run(init)
with tf.Session() as sess: sess.run(tf.global_variables_initializer()) # 参 数
初始化
for i in range(1000): # 训 练1000次 迭 代 sess.run(train, feed_dict={data:X_train,
real_label:y_train}) # 执 行 训 练 脚 本

6、定义(迭代)训练脚本并执行

在这里插入图片描述

X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, test_size=0.2) # 随机划 分 20% 的数据作为测试集

##  定义占位节点和参数节点:
data = tf.placeholder(tf.float32, [None, 4])
real_label = tf.placeholder(tf.float32, [None, 1]) # 定义占位节点,数 据入口
weight = tf.Variable(tf.random_normal([4, 1]), dtype=tf.float32) bias = tf.Variable(tf.ones([1]), dtype=tf.float32) # 定义参数节点

## 定义目标函数和优化器:
y_label = tf.add(tf.matmul(data, weight), bias)
loss = tf.reduce_mean(tf.square(real_label - y_label)) # 定义目标函数 loss
train = tf.train.GradientDescentOptimizer(0.2).minimize(loss) # 定义优 化器及优化目标 (最小化 loss)

# # 在 sess.run 中配置输入输出及优化器
with tf.Session() as sess: sess.run(tf.global_variables_initializer()) # 参 数
初始化
for i in range(1000): # 训 练1000次 迭 代 sess.run(train, feed_dict={data:X_train,
real_label:y_train}) # 执 行 训 练 脚 本
forecast_set = sess.run(y_label, feed_dict={data: X_lately})# 执行测试。X_lately: 一部分不包括在 训练集和测试集中的数据,用于生成股价预测结果

在这里插入图片描述

线性回归汇总

在这里插入图片描述

TensorFlow 模型存储

两种模式:

1、ckpt : 计算图和变量分开保存

2、pb : 计算图和变量封装在一起

ckpt模式 :

.meta .ckpt
在这里插入图片描述

ckpt 模型存储恢复

Saver=tf.train.Saver(max_to_keep = 4,
keep_checkpoint_every_n_hours = 2) Saver.save(sess, ckpt_file_path, global_step)

saver.restore(sess,tf.train.latest_checkpoint(’./ckpt’))
设置存储步长: 每 1000 个迭代保存一次
saver.save(sess, ’my_test_model’, global_step=1000)
过程中可以不更新 meta 文件:saver.save(sess, ’my_test_model’, global_step=1000, write_meta_graph=False)

 设置定时保存,且只保存四个最新的模型
saver = tf.train.Saver(max_to_keep=4, keep_checkpoint_every_n_hours=2)

存储代码实例

import tensorflow as tf
x = tf.Variable(tf.random_uniform([3]))
y = tf.Variable(tf.random_uniform([3]))
z = tf.add(x, y)
saver = tf.train.Saver()
with tf.Session() as sess: sess.run(tf.global_variables_initializer()) print(sess.run(x))
print(sess.run(y))
print(sess.run(z))
save_path = saver.save(sess, './tmp/tfplus.ckpt')

模型恢复代码实例

import tensorflow as tf
x = tf.Variable(tf.random_uniform([3]))
y = tf.Variable(tf.random_uniform([3]))
z = tf.add(x, y)
saver = tf.train.Saver()
with tf.Session() as sess: saver.restore(sess, './tmp/tfplus.ckpt') print(sess.run(x))
print(sess.run(y))
print(sess.run(z))
import tensorflow as tf
x = tf.Variable(tf.random_uniform([3])) y = tf.Variable(tf.random_uniform([3])) z = tf.add(x, y)
saver = tf.train.Saver()
with tf.Session() as sess: sess.run(tf.
global_variables_initializer()) print(sess.run(x))
print(sess.run(y)) print(sess.run(z))
save_path = saver.save(sess, './tmp
/tfplus.ckpt')
x = tf.Variable(tf.random_uniform([3])) y = tf.Variable(tf.random_uniform([3]))
z = tf.add(x, y)
saver = tf.train.Saver()^^I
with tf.Session() as sess: saver.restore(sess, './tmp/tfplus
.ckpt') print(sess.run(x))
print(sess.run(y)) print(sess.run(z))

PB模式

pb存储

import tensorflow as tf
      from tensorflow.python.framework import graph_util
x = tf.Variable(tf.random_uniform([3])) y = tf.Variable(tf.random_uniform([3])) z = tf.add(x, y, name='op_to_store')
      with tf.Session() as sess:
          sess.run(tf.global_variables_initializer())
          print(sess.run(x))
          print(sess.run(y))
          print(sess.run(z))
          constant_graph = graph_util.
             convert_variables_to_constants(sess, sess.
graph_def, ['op_to_store'])
with tf.gfile.FastGFile('./tmp2/pbplus.pb', mode='
        wb') as f: f.write(constant_graph.SerializeToString())
...............

pb 恢复

import tensorflow as tf
from tensorflow.python.platform import gfile # ...... something disappeared ......
with tf.Session() as sess:
with gfile.FastGFile('./tmp2/pbplus.pb', 'rb') as f :
graph_def = tf.GraphDef() graph_def.ParseFromString(f.read()) sess.graph.as_default() tf.import_graph_def(graph_def, name='')
sess.run(tf.global_variables_initializer())
z = sess.graph.get_tensor_by_name('op_to_store
:0') # x? y? print(sess.run(z))

import tensorflow as tf
from tensorflow.python.framework
import graph_util
x = tf.Variable(tf.random_uniform([3]))
y = tf.Variable(tf.random_uniform([3]))
z = tf.add(x, y, name='op_to_store') with tf.Session() as sess:
sess.run(tf. global_variables_initializer())
constant_graph = graph_util. convert_variables_to_constants (sess, sess.graph_def, [' op_to_store'])
with tf.gfile.FastGFile('./tmp2/ pbplus.pb', mode='wb') as f:
f.write(constant_graph. SerializeToString())
import tensorflow as tf
from tensorflow.python.platform
import gfile with tf.Session() as sess:
with gfile.FastGFile('./tmp2/ pbplus.pb', 'rb') as f:
graph_def = tf.GraphDef() graph_def.ParseFromString(f.
read()) sess.graph.as_default()
tf.import_graph_def(graph_def, name='')
sess.run(tf.global_variables_initializer()) z = sess.graph.get_tensor_by_name('
op_to_store:0') print(sess.run(z))

Eager Execution

调试即可执行, 不能调用GPU

import tensorflow as tf
import tensorflow.contrib.eager as tfe

tfe.enable_eager_execltion()

x= [[2.]]
m=tf.matmul(x,x)

猜你喜欢

转载自blog.csdn.net/yinxian9019/article/details/89855928