IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Tensorflow框架学习记录--day01--API以及案例:实现线性回归 -> 正文阅读

[Python知识库]Tensorflow框架学习记录--day01--API以及案例:实现线性回归

Tensorflow框架学习记录–day01–API以及案例:实现线性回归

基础API

tf.app

这个模块相当于为tensorflow进行的脚本提供一个main函数入口。

tf.image

tensorflow的图像处理操作。主要是一些颜色变化、变形和图像的编码和解码。

tf.gfile

这个模块提供了一组文件操作函数。

tf.summary

用来生成tensorboard可用的统计日志,目前Summary主要提供了4种类型:audio、image、histogram、scalar

tf.python_io

用来读写TFRecords文件

tf.train

这个模块提供了一些训练器,与tf.nn组合起来,实现一些网络的优化计算。

tf.nn

这个模块提供了一些构建神经网络的底层函数。tensorflow构建网络的核心模块。其中包含了添加各种层的函数,比如添加卷积层、池化层等。

高级API

tf.keras

keras本来是一个独立的深度学习库,tensorflow将其学习过来,增加这部分模块在于快速构建模型。

tf.layers

高级API,以更高级的概念层来定义一个模型。类似tf.keras。

tf.contrib

tf.contrib.layers提供够将计算图中的 网络层、正则化、摘要操作、是构建计算图的高级操作,但是tf.contrib包含不稳定和实验代码,有可能以后API会改变。

tf.estimator

一个Estimator相当于Model+Training+Evaluate的合体。在模块种,已经实现了几种简单的分类器和回归器,包括:Baseline,Learing,DNN。这里的DNN网络,只是全连接网络,没有提供卷积之类的。

在这里插入图片描述

案例:实现线性回归

线性回归原理

根据数据建立回归模型,w1x1+w2x2+…+b=y,通过真实值与预测值之间建立误差,使用梯度下降优化得到损失最小对应的权重和偏置。最终确定模型的权重和偏置参数。最后可以用这些参数进行预测。

  1. 构建模型
    y = w1x1+w2x2+…+b
  2. 构造损失函数
    均方误差(MSE)
  3. 优化损失
    梯度下降

准备真实的数据
100个样本
x 特征值 形状(100,1)(指的是一百行一列–形状
y_true 目标值(100,1)
y_true = 0.8x + 0.7
假定x和y之间的关系满足:y = kx + b(k ≈ 0.8, b ≈ 0.7)
流程分析:

(100, 1) * (1, 1) = (100, 1)【其中*指的是矩阵乘法–matimul】
y_predict = x * weights(1, 1) + bias(1, 1)
y_predict = tf.matmul(x, weights) + bias

API

运算
矩阵运算:tf.matumul(x,w)
平方:tf.square(error)
均值:tf.reduce_mean(error)
梯度下降优化:
tf.train.GradientDescentOptimizer(learning_rate)【tf.compat.v1.train.GradientDescentOptimizer
梯度下降优化
learning_rate :学习率,一般为0-1之间比较小的值
method:
minimize(lose)
return:梯度下降op

  1. 构建模型
    y_predict = tf.matmul(x, weights) + bias
  2. 构造损失函数
    error = tf.reduce_mean(tf.square(y_predict - y_true))
  3. 优化损失
optimizer = tf.compat.v1.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)

增加其他功能

  1. 变量tensorboard显示
  2. 增加命名空间
  3. 模型保存与加载
  4. 命令行参数设置

1 增加变量显示

目的:在tensorboard当中观察模型的参数、损失值等变量值的变化

1)收集变量
1、tf.summary.scalar(name=",tensor)收集对于损失函数和准确率等单值变量,name为变量的名字,tensor为值;
2、tf.summary.histogram(name=’’,tensor)收集高维度的变量参数–直方图(二维)
3、tf.summary.image(name=’'mtensor)收集输入的图片张量能显示图片–图片(三维)
2)合并变量写入事件文件
1、merged = tf.summary.merge_all()
2、运行合并:summary = sess.sun(merged),每次迭代都需运行
3、添加:FileWriter.add_summary(summary,i),i表示第几次的值。

相关代码:

# 1——创建事件文件
            file_writer = tf.compat.v1.summary.FileWriter("./tmp/linear", graph=sess.graph)
# 2——收集变量
        tf.compat.v1.summary.scalar("error", error)
        tf.compat.v1.summary.histogram("weights", weights)
        tf.compat.v1.summary.histogram("bias", bias)
# 3——合并变量
        merged = tf.compat.v1.summary.merge_all()
#4——运行合并变量操作
         summary = sess.run(merged)
#5——将每次迭代后的变量写入事件文件
       	 file_writer.add_summary(summary, i)

2 增加命名空间

使得代码结构更加清晰,tensorboard图结构清楚
在这里插入图片描述

3 模型的保存与加载

tf.train.Saver(var_list=None,max_to_keep=5)
保存和加载模型(格式:checkpoint文件–ckpt)
var_list:指定将要保存和还原的变量。它可以作为一个dict或一个列表传递
max_to_keep:指示要保留的最近检查点文件的最大数量。创建新文件时,会删除较旧的文件,如果无或0,则保留所有检查点文件。默认为5(即保留最新的5个检查点文件)
相关代码:

#保存模型
                if i % 10 == 0:
                    saver.save(sess, "./tmp/model/my_linear.ckpt")

                #加载模型
                if os.path.exists("./tmp/model/checkpoint"):
                    saver.restore(sess, "./tmp/model/my_linear.ckpt")

                print("训练前模型参数为:权重%f, 偏置%f, 损失为%f" % (weights.eval(), bias.eval(), error.eval())

4 学习率的设置、步数设置与梯度爆炸

学习率愈大,训练到较好结果的步数越小;学习率越小,训练倒较好结果的步数越大。
但是学习过大会出现梯度爆炸现象。
梯度爆炸:
在极端情况下,权重的值变得非常大,以至于溢出,导致NaN值
如何解决梯度爆炸问题?

  1. 重新设计网络
  2. 调整学习率
  3. 使用梯度截断(在训练过程中检查和限制梯度的大小)
  4. 使用激活函数

5 变量的trainable设置观察

trainable的参数作用,指定是否训练

全部代码:

def linear_regression():
    """
    自实现一个线性回归
    """
    with tf.compat.v1.variable_scope("prepare_data"):

        # 1) 准备数据
        X = tf.compat.v1.random_normal(shape=[100, 1], name="feature")
        y_true = tf.matmul(X, [[0.8]]) + 0.7

    with tf.compat.v1.variable_scope("create_model"):
        # 2)构造模型
        #定义模型参数 用变量
        weights = tf.Variable(initial_value=tf.compat.v1.random_normal(shape=[1, 1]), name="Weights")
        bias = tf.Variable(initial_value=tf.compat.v1.random_normal(shape=[1, 1]), name="Bias")
        y_predict = tf.matmul(X, weights) + bias

    with tf.compat.v1.variable_scope("loss_function"):
        # 3)构造损失函数(MSE-均方误差)
        error = tf.reduce_mean(tf.square(y_predict - y_true))

    with tf.compat.v1.variable_scope("optimizer"):
        # 4)优化损失
        optimizer = tf.compat.v1.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)

        # 2——收集变量
        tf.compat.v1.summary.scalar("error", error)
        tf.compat.v1.summary.histogram("weights", weights)
        tf.compat.v1.summary.histogram("bias", bias)
        # 3——合并变量
        merged = tf.compat.v1.summary.merge_all()

        #创建Saver对象
        saver = tf.compat.v1.train.Saver()

        # 显式地初始化变量
        init = tf.compat.v1.global_variables_initializer()

        # 开启会话
        with tf.compat.v1.Session() as  sess:
            # 初始化变量
            sess.run(init)

            # 1——创建事件文件
            file_writer = tf.compat.v1.summary.FileWriter("./tmp/linear", graph=sess.graph)

            # 查看初始化模型参数之后的值
            print("训练前模型参数为:权重%f, 偏置%f, 损失为%f" % (weights.eval(), bias.eval(), error.eval()))

            # 开始训练
            for i in  range(100):
                sess.run(optimizer)
                print("训练前模型参数为:权重%f, 偏置%f, 损失为%f" % (weights.eval(), bias.eval(), error.eval()))

                #4——运行合并变量操作
                summary = sess.run(merged)
                #5——将每次迭代后的变量写入事件文件
                file_writer.add_summary(summary, i)

                #保存模型
                if i % 10 == 0:
                    saver.save(sess, "./tmp/model/my_linear.ckpt")

                #加载模型
                if os.path.exists("./tmp/model/checkpoint"):
                    saver.restore(sess, "./tmp/model/my_linear.ckpt")

                print("训练前模型参数为:权重%f, 偏置%f, 损失为%f" % (weights.eval(), bias.eval(), error.eval()))



    return None

tensorboard显示:
graphs:
在这里插入图片描述SCALARS:
在这里插入图片描述
DISTRIBUTIONS:
在这里插入图片描述

HISTOGRAMS:
在这里插入图片描述
以上!!!!

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-13 21:44:46  更:2022-03-13 21:45:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 16:56:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计