深度学习基础之《TensorFlow框架(10)—案例:实现线性回归(2)》

增加其他功能

一、增加变量显示

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

2、收集变量
不同的变量要用不同的方式收集

(1)tf.summary.scalar(name='', tensor)
收集对于损失函数和准确率等单值变量,name为变量的名字,tensor为值

(2)tf.summary.histogram(name='', tensor)
收集高维度的变量参数

(3)tf.summary.image(name='', tensor)
收集输入的图片张量,能显示图片

3、合并变量写入事件文件
(1)merged = tf.summary.merge_all()

4、修改代码

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf

def tensorflow_demo():
    """
    TensorFlow的基本结构
    """

    # TensorFlow实现加减法运算
    a_t = tf.constant(2)
    b_t = tf.constant(3)
    c_t = a_t + b_t
    print("TensorFlow加法运算结果:\n", c_t)
    print(c_t.numpy())

    # 2.0版本不需要开启会话,已经没有会话模块了

    return None

def graph_demo():
    """
    图的演示
    """
    # TensorFlow实现加减法运算
    a_t = tf.constant(2)
    b_t = tf.constant(3)
    c_t = a_t + b_t
    print("TensorFlow加法运算结果:\n", c_t)
    print(c_t.numpy())

    # 查看默认图
    # 方法1:调用方法
    default_g = tf.compat.v1.get_default_graph()
    print("default_g:\n", default_g)

    # 方法2:查看属性
    # print("a_t的图属性:\n", a_t.graph)
    # print("c_t的图属性:\n", c_t.graph)

    # 自定义图
    new_g = tf.Graph()
    # 在自己的图中定义数据和操作
    with new_g.as_default():
        a_new = tf.constant(20)
        b_new = tf.constant(30)
        c_new = a_new + b_new
        print("c_new:\n", c_new)
        print("a_new的图属性:\n", a_new.graph)
        print("b_new的图属性:\n", b_new.graph)

    # 开启new_g的会话
    with tf.compat.v1.Session(graph=new_g) as sess:
        c_new_value = sess.run(c_new)
        print("c_new_value:\n", c_new_value)
        print("我们自己创建的图为:\n", sess.graph)

    # 可视化自定义图
    # 1)创建一个writer
    writer = tf.summary.create_file_writer("./tmp/summary")
    # 2)将图写入
    with writer.as_default():
        tf.summary.graph(new_g)

    return None

def session_run_demo():
    """
    feed操作
    """
    tf.compat.v1.disable_eager_execution()
    
    # 定义占位符
    a = tf.compat.v1.placeholder(tf.float32)
    b = tf.compat.v1.placeholder(tf.float32)
    sum_ab = tf.add(a, b)
    print("a:\n", a)
    print("b:\n", b)
    print("sum_ab:\n", sum_ab)
    # 开启会话
    with tf.compat.v1.Session() as sess:
        print("占位符的结果:\n", sess.run(sum_ab, feed_dict={a: 1.1, b: 2.2}))
 
    return None

def tensor_demo():
    """
    张量的演示
    """
    tensor1 = tf.constant(4.0)
    tensor2 = tf.constant([1, 2, 3, 4])
    linear_squares = tf.constant([[4], [9], [16], [25]], dtype=tf.int32)
    print("tensor1:\n", tensor1)
    print("tensor2:\n", tensor2)
    print("linear_squares:\n", linear_squares)

    # 张量类型的修改
    l_cast = tf.cast(linear_squares, dtype=tf.float32)
    print("before:\n", linear_squares)
    print("l_cast:\n", l_cast)

    return None

def variable_demo():
    """
    变量的演示
    """
    a = tf.Variable(initial_value=50)
    b = tf.Variable(initial_value=40)
    c = tf.add(a, b)
    print("a:\n", a)
    print("b:\n", b)
    print("c:\n", c)
    with tf.compat.v1.variable_scope("my_scope"):
        d = tf.Variable(initial_value=30)
        e = tf.Variable(initial_value=20)
        f = tf.add(d, e)
    print("d:\n", d)
    print("e:\n", e)
    print("f:\n", f)
    return None

def linear_regression():
    """
    自实现一个线性回归
    """
    # 1、准备数据
    x = tf.random.normal(shape=[100,1])
    y_true = tf.matmul(x, [[0.8]]) + 0.7

    # 2、构造模型
    # 定义模型参数,用变量
    weights = tf.Variable(initial_value=tf.random.normal(shape=[1, 1]))
    bias = tf.Variable(initial_value=tf.random.normal(shape=[1, 1]))
    y_predict = tf.matmul(x, weights) + bias
    
    # 3、构造损失函数
    error = tf.reduce_mean(tf.square(y_predict - y_true))

    # 4、优化器
    #optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)
    optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)
    
    # 创建事件文件
    file_writer = tf.summary.create_file_writer("./tmp/summary")

    # 收集变量
    with file_writer.as_default():
        tf.summary.experimental.set_step(0)
        # 记录标量变量
        tf.summary.scalar("error", error)
        # 记录变量的直方图
        tf.summary.histogram("weights", weights)
        tf.summary.histogram("bias", bias)
    
    # 5、查看初始化模型参数之后的值
    print("训练前模型参数为:权重%f,偏置%f,损失%f" % (weights, bias, error))

    # 6、开始训练
    num_epoch = 200 # 定义迭代次数
    
    for e in range(num_epoch): # 迭代多次
        with tf.GradientTape() as tape:
            y_predict = tf.matmul(x, weights) + bias
            error = tf.reduce_mean(tf.square(y_predict - y_true))
            #error = loss_function(y_predict, y_true)
        grads = tape.gradient(error, [weights, bias]) # 求损失关于参数weights、bias的梯度
        optimizer.apply_gradients(grads_and_vars=zip(grads, [weights, bias])) # 自动根据梯度更新参数,即利用梯度信息修改weights与bias,使得损失减小
   
        # 每个步骤记录变量
        with file_writer.as_default():
            tf.summary.experimental.set_step(e + 1)
            # 记录标量变量
            tf.summary.scalar("error", error)
            # 记录变量的直方图
            tf.summary.histogram("weights", weights)
            tf.summary.histogram("bias", bias)

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

    return None

if __name__ == "__main__":
    # 代码1:TensorFlow的基本结构
    # tensorflow_demo()
    # 代码2:图的演示
    #graph_demo()
    # feed操作
    #session_run_demo()
    # 代码4:张量的演示
    #tensor_demo()
    # 代码5:变量的演示
    #variable_demo()
    # 代码6:自实现一个线性回归
    linear_regression()

 运行结果:

训练前模型参数为:权重1.398883,偏置-0.596879,损失1.965775
训练后模型参数为:权重0.823115,偏置0.676830,损失0.001003

5、查看TensorBoard

 

二、TensorFlow2.0如何显示静态图

1、在TensorFlow1.0时代,采用的是静态计算图,需要先使用TensorFlow的各种算子创建计算图,然后再开启一个会话Session,显式执行计算图

2、而在TensorFlow2.0时代,采用的是动态计算图,即每使用一个算子后,该算子会被动态加入到隐含的默认计算图中立即执行得到结果,而无需开启Session

3、如果需要在TensorFlow2.0中使用静态图,可以使用@tf.function装饰器将普通Python函数转换成对应的TensorFlow计算图构建代码。运行该函数就相当于在TensorFlow1.0中用Session执行代码。使用tf.function构建静态图的方式叫做Autograph

4、计算图简介
计算图由节点(nodes)和线(edges)组成
节点表示操作符Operator,或者称之为算子,线表示计算间的依赖
实线表示有数据传递依赖,传递的数据即张量
虚线通常可以表示控制依赖,即执行先后顺序

5、因为代码里用到了变量,没法用tf.function把静态图弄出来
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/480948.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mac下 3.6.3 版本 maven

问题 Blocked mirror for repositories: [snapshots (http://xxx/artifactory/gm-maven-vir, default, releasessnapshots)]无法访问 Maven 3.8.1 http 仓库。可能的解决方案: - 检查 Maven settings.xml 是否不包含 http 仓库 - 检查 Maven pom 文件是否不包含 http 仓库 htt…

【蓝桥杯嵌入式】四、各种外设驱动(九)ADC(1):软件触发与中断触发方式

温馨提示:本文不会重复之前提到的内容,如需查看,请参考附录 【蓝桥杯嵌入式】附录 目录 重点提炼: 一、需求分析 1、需要的外设资源分析: 2、外设具体分析: 比赛时ADC可能需要配置的部分:…

MySQL慢查优化 循环/嵌套子查询(DEPENDENT SUBQUERY)

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 虽然 MySQL5.6 引入…

安装vcenter管理esxi虚拟化操作系统

安装vcenter管理esxi虚拟化操作系统 文章目录 安装vcenter管理esxi虚拟化操作系统1.安装vcenter2.vcenter的应用 1.安装vcenter esxi虚拟机具体安装步骤请参考上一篇文章,vcenter软件包需自己到网上下 2.vcenter的应用

Android Studio实现内容丰富的安卓校园二手交易平台(带聊天功能)

获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 项目编号083 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.查看二手商品列表 3.发布二手商品 4.商品详情 5.聊天功能…

UE5制作推箱子动作时获取物体与角色朝向的角度及跨蓝图修改变量

就是脑残死磕,你们如果有更好的方法一定要留言啊~~独乐乐不如众乐乐。 做推箱子的时候需要考虑脸是不是面对着箱子,不是必须90度,可以有一个-45~45度的范围。 摸索了一下,有几种做法和几个小白坑,这里列出来。 一、准…

Apache James数据库存储用户信息的密码加密问题

项目场景 Apache James邮件服务器使用数据库来存储用户信息的密码加密问题&#xff1a; 将James的用户改为数据库存储James密码是如何加密验证的 1.将James的用户改为数据库存储 1、修改存储方式 找到james-2.3.2\apps\james\SAR-INF\config.xml 找到<users-store>标…

图论07-被包围的区域(Java)

7.被包围的区域 题目描述 给你一个 m x n 的矩阵 board &#xff0c;由若干字符 X 和 O &#xff0c;找到所有被 X 围绕的区域&#xff0c;并将这些区域里所有的 O 用 X 填充。 示例 1&#xff1a; 输入&#xff1a;board [["X","X","X",&qu…

政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(五)—— Dropout和批归一化

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; Dropout和批归一化是深度学习领域中常用的正则化技术&…

2016年认证杯SPSSPRO杯数学建模B题(第二阶段)多帧图像的复原与融合全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 B题 多帧图像的复原与融合 原题再现&#xff1a; 数码摄像技术被广泛使用于多种场合中。有时由于客观条件的限制&#xff0c;拍摄设备只能在较低的分辨率下成像。为简单起见&#xff0c;我们只考虑单色成像。假设成像的分辨率为 32 64&#x…

案例分享:一次NetApp A300/FAS8200控制器更换完美踩坑总结

本文是对近期更换一个net App AFF-A300 控制器更换过程中遇到问题的简单总结&#xff0c;希望对大家有所帮助&#xff0c;避免未来再进坑。 客户环境&#xff1a; 客户是一台NetApp的All Flash存储系统A300的一个控制器offline&#xff0c;另外一个控制器已经成功takeover了这…

python文学名著分享系统的设计与实现flask-django-nodejs-php

在此基础上&#xff0c;结合现有文学名著分享体系的特点&#xff0c;运用新技术&#xff0c;构建了以python为基础的文学名著分享信息化管理体系。首先&#xff0c;以需求为依据&#xff0c;根据需求分析结果进行了系统的设计&#xff0c;并将其划分为管理员和用户二种角色和多…

基于Spring Boot+Vue的高校办公室行政事务管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

【正点原子Linux连载】第十七章 异步通知实验 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1&#xff09;实验平台&#xff1a;正点原子ATK-DLRK3568开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id731866264428 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第十七…

代码+视频,R语言logistic回归交互项(交互作用)的可视化分析

交互作用效应(p for Interaction)在SCI文章中可以算是一个必杀技&#xff0c;几乎在高分的SCI中必出现&#xff0c;因为把人群分为亚组后再进行统计可以增强文章结果的可靠性&#xff0c;不仅如此&#xff0c;交互作用还可以使用来进行数据挖掘。在既往文章中&#xff0c;我们已…

MySQL:数据库基础

文章目录 什么是数据库数据库的认识登陆数据库理解数据库数据库的相关概念数据库的工作方式 数据库的基本使用服务器/数据库/表MySQL架构 本篇开始进行关于MySQL的学习&#xff0c;首先要对于数据库有一个基本的认识 什么是数据库 数据库主要是用来管理文件的&#xff0c;那此…

化工企业能源在线监测管理系统,智能节能助力生产

化工企业能源消耗量极大&#xff0c;其节能的空间也相对较大&#xff0c;所以需要控制能耗强度&#xff0c;保持更高的能源利用率。 化工企业能源消耗现状 1、能源管理方面 计量能源消耗时&#xff0c;计量器具存在问题&#xff0c;未能对能耗情况实施完全计量&#xff0c;有…

苍穹外卖-day03

1. 公共字段自动填充 1.1 问题分析 业务表中的公共字段&#xff1a; 序号字段名含义数据类型1create_time创建时间datetime2create_user创建人idbigint3update_time修改时间datetime4update_user修改人idbigint 而针对于这些字段&#xff0c;我们的赋值方式为&#xff1a; 在新…

分布式Raft原理详解,从不同角色视角分析相关状态

分布式Raft原理详解&#xff0c;从不同角色视角分析相关状态 1. CAP定理2.Raft 要解决的问题3. Raft的核心逻辑3.1. Raft的核心逻辑2.1. 复制状态机2.2. 任期 Term2.3. 任期的意义&#xff1a;逻辑时钟2.4 选举定时器 3. Leader选举逻辑4. 从节点视角查看Leader选举4.1. Follow…

MATLAB中的数学建模:基础知识、实例与方法论

前言 在当今科技高速发展的时代&#xff0c;数学建模成为了解析复杂世界的关键工具&#xff0c;而MATLAB作为一种专业的科学计算软件&#xff0c;为我们提供了强大的数学建模平台。MATLAB不仅仅是Matrix Laboratory的简称&#xff0c;更是一个集数值分析、矩阵计算、算法开发和…