深度学习---三好学生各成绩所占权重问题(3)

2024-01-19 06:10

本文主要是介绍深度学习---三好学生各成绩所占权重问题(3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝

🥰 博客首页:knighthood2001

😗 欢迎点赞👍评论🗨️

❤️ 热爱python,期待与大家一同进步成长!!❤️

        之前,我们从三好学生成绩问题开始,设计出了解决该问题的神经网络模型,但是这个模型更多的是从一般的思维方式来设计的,这与神经网络通常设计中的思路并不一致,因此本文章,我们来看看如何优化该模型,让它的逻辑更清晰、运行更高效。

目录

全部代码

代码讲解 

结果展示 


全部代码

import tensorflow as tftf.compat.v1.disable_eager_execution()x = tf.compat.v1.placeholder(shape=[3], dtype=tf.float32)
yTrain = tf.compat.v1.placeholder(shape=[], dtype=tf.float32)w = tf.Variable(tf.zeros([3]), dtype=tf.float32)n = x * wy = tf.reduce_sum(n)loss = tf.abs(y - yTrain)optimizer = tf.compat.v1.train.RMSPropOptimizer(0.001)train = optimizer.minimize(loss)sess = tf.compat.v1.Session()init = tf.compat.v1.global_variables_initializer()sess.run(init)for i in range(5000):result = sess.run([train, x, w, y, yTrain, loss], feed_dict={x: [90, 80, 70], yTrain: 85})print(result)result = sess.run([train, x, w, y, yTrain, loss], feed_dict={x:[98, 95, 87], yTrain: 96})print(result)

代码讲解 

        之前设计的神经网络模型中,把学生的德育、智育、体育3项分数分别对应x1、x2、x3这了个输入层的节点,这样本身没有问题,但是假设又增加了一个艺术分数, 那么就需要在输入层增加一个x4节点,在隐藏层对应的也要增加一个n4节点。也就是说,输入数据改变时,即使整套逻辑没有变,也要去修改整个网络模型,比较麻烦。

        另外,节点数多了也会让模型图看起来比较复杂。所以在通常的神经网络中,很多时候会把这种串的数据组织成一个 “向量”来送入神经网络进行计算。这里的“向量”与数学几何中的向量概念稍有不同,就是指一串数字,在程序中用一个数组来表示,例如,三好学生成绩问题中第一个学生的3项分数可以用[90, 80, 70]这样一个数组就表示出来了。数组是有顺序的,可以约定第一项代表德育分、 第二项代表智育分、 第三项代表体育分。向量中有几个数字,一般就把它叫作几“维”的向量,例如刚才这个向量就是一个三维向量。

x1 = tf.compat.v1.placeholder(dtype=tf.float32)
x2 = tf.compat.v1.placeholder(dtype=tf.float32)
x3 = tf.compat.v1.placeholder(dtype=tf.float32)

改成了一个三维的向量存入变量x

x = tf.compat.v1.placeholder(shape=[3], dtype=tf.float32)

 变量x的定义语句稍有不同,其中增加了一个命名参数shape,这是表示变量x的形态的,它的取值是“[3]”, 表示输入占位符x的数据将是一个有3个数字的数组,也就是一个三维向量。 

w1、w2、w3这3个可变参数也被缩减成了一个三维向量w:

w = tf.Variable(tf.zeros([3]), dtype=tf.float32)

其中tf.Variable函数的第一个参数还是定义这个可变参数的初始值,由于x是一个形态为[3]的三维向量,w也需要相应地是一个形态为[3]的三维向量,而我们用tf.zeros这个函数可以生成一个值全为0的向量,也就是说tf.zeros([3])的返回值将是一个数组[0, 0, 0],这个向量将作为w的初始值。 

yTrain因为只是一个普通数字,不是向量,如果要给它个形态的话, 可以用一个空的方括号“[]”来代表。 

yTrain = tf.compat.v1.placeholder(shape=[], dtype=tf.float32)

隐藏层节点变量n1、n2、n3也被缩减成一个变量 n: 

n = x * w

假设输入数据x为[90, 80, 70],也就是第一位学生的3项分数,此时w为[2,3,4],那么n=x*W的运算结果就是[90 * 2, 80* 3, 70* 4],即[180, 240,280]。这是因为“*”代表数学中矩阵运算的“点乘”,点乘是指两个形态相同的矩阵中每个相同位置的数字相乘,结果还是和这两个矩阵形态都样的矩阵。向量的点乘与矩阵点乘的方法是一样的, 所以x * w的计算结果还是与x或w相同形态的三维向量,其中第一维的结果是 x中的第一维的数字 90乘以w中的第一维的数字2, 即90*2得到180,后面依此类推

由于我们把原来3个隐藏层节点n、n2、n3缩减成了一个向量 n,输出层节点y的计算也要做出改变: 

y = tf.reduce_sum(n)

tf.reduce sum函数的作用是把作为它的参数的向量(以后还可能会是矩阵)中的所有维度的值相加求和,与原来y=n1 +n2 + n3的含义是相同的。

    result = sess.run([train, x, w, y, yTrain, loss], feed_dict={x: [90, 80, 70], yTrain: 85})print(result)result = sess.run([train, x, w, y, yTrain, loss], feed_dict={x:[98, 95, 87], yTrain: 96})print(result)

最后这里改变一下即可 

结果展示 

我们最终重复循环训练5000次

看最后的几条结果,我们可以看到,误差也被控制到很小的范围,3个权重也分别接近预期值。 

这篇关于深度学习---三好学生各成绩所占权重问题(3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/621478

相关文章

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图