深度学习(初识tensorflow2.版本)之三好学生成绩问题(1)

🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝
🥰 博客首页:knighthood2001
😗 欢迎点赞👍评论🗨️
❤️ 热爱python,期待与大家一同进步成长!!❤️
👀 给大家推荐一款很火爆的刷题、面试求职网站 👀

目录

三好学生成绩问题的引入

搭建解决三好学生成绩问题的神经网络

构建的神经网络的代码

代码讲解

三好学生成绩问题的引入

我们来看这样一个问题: 某个学校将要评选三好学生,我们知道,三好学生的”三好”指的是品德好、学习好、体育好:而要进行评选,如今都需要 量化,也就是说 学校会根据德育分、智育分和体育分3项分数来计算一个总分, 然后根据总分来确定谁能够被评选为三好学生。 假设这个学校计算总分的规则是:德育分占60% ,智育分占30%,体育分占10% 。这个规则如果用一个公式来表达是这样的
总分=德育分0.6 +智育分 0.3 +体育分*0.1

可以看到,计算三好学生总成绩的公式实际上是把3项分数各自乘上一个权重(weight)值,然后相加求和。

以上是我们要解决问题的背景。那么,我们需要 解决的问题是这样的:有两位孩子的家长,知道了自己孩子的3项分数及总分,但是 学校并没有告诉家长们计算出总分的规则。家长们猜测出计算总分的方法肯定是把3项分数乘以不同的权重后相加来获得,唯一不知道的就是这几个权重值到底是多少。现在家长们就想用人工智能中神经网络的方法来大致推算出这3个权重分别是多少。我们假设第一位家长的孩子A的 德育分是90、智育分是80、 体育分是70、总分是85,并分别用 w1、w2、w3来代表德育分、智育分和体育分所乘的权重,可以得到这个式子:
90 * w1 + 80 * w2 + 70 * w3 = 85

另一位孩子B的 德育分是98、智育分是95、体育分是87、总分是96,我们可以得到这个式子:
98 * w1 + 95 * w2 + 87 * w3 = 96

就数学中解方程的方法而言,这两个公式总共有三个未知数。从理论上讲,只要有三个不等价的公式,答案是可以解的。但是我们只有两个学生的数据,而且我们只能得出两个公式,所以我们不能通过解方程来解决这个问题。此时,可以尝试用神经网络的方法来解决这个问题。

[En]

In terms of the method of solving equations in mathematics, there are a total of three unknowns in these two formulas. in theory, as long as there are three unequivalent formulas, the answer can be solved. But we only have the data of two students, and we can only come up with two formulas, so we can’t solve this problem by solving the equation. At this time, the neural network method can be used to try to solve this problem.

搭建解决三好学生成绩问题的神经网络

理论知识

深度学习(初识tensorflow2.版本)之三好学生成绩问题(1)

神经网络模型图一般均包含1个输入层、1个或多个隐藏层,以及1个输出层。

②一般来说, 输入层是描述输入数据的形态的;我们用方块来代表每条输入数据的一个数 (或者叫一个字段),叫作输入节点;输入节点一般用x来命名,如果有多个数值,则用x1,x2,…,xn来代表。

隐藏层是描述我们设计的神经网络模型结构中最重要的部分;隐藏层可能有多个;每一层中都会有1个或多个神经元,我们用圆圈来表示,叫做神经元节点或隐藏节点,有时也直接简称为节点;每一个节点都接收上一层传来的数据并进行一定的运算后向下一层输出数据,符合神经元的特性,神经元节点上的这些运算称为计算操作或操作(operation,简称op)

输出层一般是神经网络模型的最后一层,会包含1个或多个以菱形表示的输出节点,输出节点代表着整个神经网络计算的最后结果:输出层的节点一般习惯上用y来命名,但并非必须。

⑤我们在神经网络模型图中,一般约定在各个节点的 右下方(有时候因为拥挤也会在左下方)标记节点的名称,在节点的 左上方标记该节点所做的计算,例如,x1、x2、x3、n1、n2、n3、y都是节点名称,”w1″、 “w2″、 “*w3″这些都代表节点运算。

现在我们回到模型本身,这是一个标准的 前馈神经网络,即信号总是往前传递的神经网络。输入层有3个节点x1、x2、x3,分别代表前面所说的德育分、智育分和体育分。因为问题比较简单,隐藏层我们只设计了一层,其中有3个节点n1、n2、n3,分别对3个输入的分数进行处理,处理的方式就是分别乘以3个权重w1、w2、w3。输出层只有一个节点y, 因为我们只要求一个总分数值; 节点y的操作就是把n1、n2、n3这3个节点输出过来的数值进行 相加求和

构建的神经网络的代码

import tensorflow as tf
placeholder和eager execution不兼容
tf.compat.v1.disable_eager_execution()

定义三个输入节点
x1 = tf.compat.v1.placeholder(dtype=tf.float32)
x2 = tf.compat.v1.placeholder(dtype=tf.float32)
x3 = tf.compat.v1.placeholder(dtype=tf.float32)

定义权重(可变参数)
w1 = tf.Variable(0.1, dtype=tf.float32)
w2 = tf.Variable(0.1, dtype=tf.float32)
w3 = tf.Variable(0.1, dtype=tf.float32)

隐藏层
n1 = x1 * w1
n2 = x2 * w2
n3 = x3 * w3

输出层
y = n1 + n2 + n3

会话,管理神经网络操作的对象<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>Session, an object that manages the operation of a neural network</font>*</details>
sess = tf.compat.v1.Session()

init = tf.compat.v1.global_variables_initializer()

在sess会话中运行初始化这个函数
sess.run(init)

执行一次神经网络的计算
result = sess.run([x1, x2, x3, w1, w2, w3, y], feed_dict={x1: 90, x2: 80, x3: 70})
print(result)
[array(90., dtype=float32), array(80., dtype=float32), array(70., dtype=float32), 0.1, 0.1, 0.1, 24.0]

代码讲解

tf.compat.v1.disable_eager_execution()

需要加这个,原因是placeholder和eager execution不兼容

定义三个输入节点
x1 = tf.compat.v1.placeholder(dtype=tf.float32)
x2 = tf.compat.v1.placeholder(dtype=tf.float32)
x3 = tf.compat.v1.placeholder(dtype=tf.float32)

定义3个输入节点, placeholder(占位符),所谓占位符,就是在编写程序时还不确定要输入什么数,而在程序运行的时候才会输入,编程时仅仅把这个节点定义好,先”占个位子”。

dtype是”data type”的缩写,表示占位符所代表的数值的类型,tf.float32是tensorflow中的32位浮点数,即用32位二进制来代表一个小数,一般32位浮点数能满足计算的需要。

定义权重(可变参数)
w1 = tf.Variable(0.1, dtype=tf.float32)
w2 = tf.Variable(0.1, dtype=tf.float32)
w3 = tf.Variable(0.1, dtype=tf.float32)

这里用来定义每个分数的权重,在神经网络中, 类似权重这种会在训练中经常性的变化的神经元参数,tensorflow把他们叫做变量。

定义w1、w2、w3的形式除了函数用的是 tf.Variable函数外,其他与定义占位符x1、x2、x3的时候类似,还有一点不同是除了用dtype参数来指定数值类型,还 传入了另一个初始值参数,这个参数没有用命名参数的形式,这是因为tf.Variable函数规定第一个参数是用于指定可变参数的初始值有可以看到,我们把w1、w2、w3的初始值都设置为0.1。

隐藏层
n1 = x1 * w1
n2 = x2 * w2
n3 = x3 * w3

输出层
y = n1 + n2 + n3

这里定义了隐藏层和输出层。

[En]

The hidden layer and output layer are defined here.

以上完成了神经网络模型的定义,然后看看如何在这个神经网络中输入数据并得到运算结果。

[En]

The above completed the definition of the neural network model, and then take a look at how to input data in this neural network and get the operation results.

会话,管理神经网络操作的对象<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>Session, an object that manages the operation of a neural network</font>*</details>
sess = tf.compat.v1.Session()

init = tf.compat.v1.global_variables_initializer()

在sess会话中运行初始化这个函数
sess.run(init)

首先定义一个sess变量,它包含一个会话(session)对象,我们可以把 会话简单的理解为管理神经网络运行的一个对象,有了会话对象,我们的神经网络就可以正式运转。

会话对象管理神经网络的第一步,一般是要把所有的可变参数初始化,也就是给所有可变参数一个各自的初始值,

首先让变量init 等于global_variables_initializer 这个函数的返回值,它返回的是一个专门用于初始化可变参数的对象。然后调用会话对象sess的成员函数run(),带上init变量作为参数,就可以实现对我们之前定义的神经网络模型中所有可变参数的初始化。run(init)就是在sess会话中运行初始化这个函数。具体给每个可变参数赋什么样的初值,是由我们刚才在定义w1、w2、w3时的第一个参数来决定的。我们把它设置为了0.1.

执行一次神经网络的计算
result = sess.run([x1, x2, x3, w1, w2, w3, y], feed_dict={x1: 90, x2: 80, x3: 70})
print(result)
[array(90., dtype=float32), array(80., dtype=float32), array(70., dtype=float32), 0.1, 0.1, 0.1, 24.0]
result = sess.run([x1, x2, x3, w1, w2, w3, y], feed_dict={x1: 98, x2: 95, x3: 87})
print(result)
[array(98., dtype=float32), array(95., dtype=float32), array(87., dtype=float32), 0.1, 0.1, 0.1, 28.0]

这里我们进行了真正意义上的的计算,sess.run函数的 第一个参数为一个数组,代表我们需要查看哪些结果项; 另一个参数feed_dict,代表我们要输入的数据。

结果如下

[array(90., dtype=float32), array(80., dtype=float32), array(70., dtype=float32), 0.1, 0.1, 0.1, 24.0]
[array(98., dtype=float32), array(95., dtype=float32), array(87., dtype=float32), 0.1, 0.1, 0.1, 28.0]

经过验算:

900.1+800.1+70*0.1=24

980.1+950.1+87*0.1=28

正确, 说明我们搭建的神经网络计算的结果是正确的。

后续进行训练神经网络,敬请期待……

Original: https://blog.csdn.net/knighthood2001/article/details/125464728
Author: knighthood2001
Title: 深度学习(初识tensorflow2.版本)之三好学生成绩问题(1)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/496042/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • PyTorch官方教程笔记:文本主题

    诸神缄默不语-个人CSDN博文目录 PyTorch官方教程网址:Welcome to PyTorch Tutorials — PyTorch Tutorials 1.11.0+cu…

    人工智能 2023年5月30日
    073
  • ZBar源码分析——image.c | 2021SC@SDUSC

    2021SC@SDUSC 一、Image 模块 ZBar的工作流程在以往的博客中做过一些介绍,在前几次的博客分析中也对video input部分和image scanner部分的一…

    人工智能 2023年7月12日
    067
  • Framework是否支持自定义的损失函数或评估指标

    问题介绍 在机器学习中,我们通常需要定义损失函数或评估指标来评估模型的性能。然而,有些机器学习框架可能不支持用户自定义的损失函数或评估指标。本文将详细介绍如何在一个常用的机器学习框…

    人工智能 2024年1月1日
    032
  • pandas的简单介绍和数据结构

    pandas简单介绍 一、python数据分析三剑客: numpy pandas Matplotlib 二、介绍三剑客: 1.Numpy:Python语言的一个扩展程序库,支持大量…

    人工智能 2023年7月16日
    053
  • Matlab实现简单的图像阈值分割,分离背景与前景

    要求 基于图像的灰度直方图,计算分割双峰的阈值,实现灰度图像前景和背景的分离。分离后的图像矩阵中,前景和背景用0和1表示。 显示灰度图像 对于有3通道的RGB图像,需要预先使用rg…

    人工智能 2023年6月17日
    0103
  • 【机器学习】相似度度量方法总结

    描述样本之间相似度的方法有很多种,一般来说常用的有相关系数和欧式距离。 在做分类时,常常需要估算不同样本之间的相似性度量( Similarity Measurement),这时通常…

    人工智能 2023年7月17日
    078
  • 《知识图谱方法、实践与应用》- 第六章 知识图谱推理

    ——总结自王昊奋、漆桂林、陈华钧主编的《知识图谱方法、实践及应用》一书的第六章 知识图谱推理。 1 面向知识图谱的推理 主要围绕关系的推理展开,即基于图谱中已有的事实或关系推断出未…

    人工智能 2023年6月1日
    063
  • 可视化图形集合(一)

    目录 一、散点图 二、直方图 三、箱线图 四、词云 五、误差线图 一、散点图 1.使用场景 散点图用于考察定量数据之间的关联关系,即查看X和Y之间的关系情况。 散点图通常用于探索性…

    人工智能 2023年6月18日
    090
  • Web服务器

    Web服务器 1.Web服务器简介 简单来说 Web服务器就是一个能够接收http请求并作出响应的java程序 我们再二阶段编写的webServer项目其实就是我们手写的Web服务…

    人工智能 2023年6月27日
    070
  • 卷积层在AI算法中的作用是什么

    卷积层在AI算法中的作用是什么? 介绍 在机器学习和深度学习中,卷积神经网络(Convolutional Neural Network, CNN)是一种广泛应用于计算机视觉任务的深…

    人工智能 2024年1月1日
    018
  • 【机器学习】k-近邻分类算法

    一 分类 简单地说,机器学习就是把无序的数据转换成有用的信息。机器学习可用于创建专家系统。(如识别鸟类,那就可以替代鸟类专家) 特征或属性通常是训练样本集的列,它们是独立测量得到的…

    人工智能 2023年7月1日
    067
  • YOLOv7——训练自己的数据集

    论文地址:https://arxiv.org/abs/2207.02696 源码地址:https://github.com/WongKinYiu/yolov7 下载好代码包,解压后…

    人工智能 2023年6月23日
    063
  • python module handbook

    1.base 1. dir(模块名):查看该模块下有哪些函数 2. 行列转置 dataframe.unstack(0):行列转置,并将行列名进行转换 dataframe.stack…

    人工智能 2023年7月17日
    059
  • python实现K均值聚类算法

    之前做大作业的时候本来想用聚类法给点集分类的,但是太复杂了,于是最后没有采用这个方案。现在把之前做的一些工作整理出来写个小博客。 K-means聚类法原理: 聚类是一个将数据集中在…

    人工智能 2023年6月2日
    079
  • Softmax(分类模型基础)——最全重难点解释及代码

    文章目录 * – + softmax 从零开始实现 + * 1. 图像分类数据集 * – 1.1 数据集加载与处理 – 1.2 读取小批量 &#…

    人工智能 2023年7月2日
    0119
  • Embedding原理到实战

    原创:王稳钺资料来源:张春阳 词向量被应用在非常非常多的场景中,甚至可以说跟文字相关的互联网应用基本上都会跟词向量有关系。本文主要从应用、发展以及实战代码来介绍词向量。 1. 词向…

    人工智能 2023年5月30日
    051
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球