16.python实现线性单元和梯度下降-10月4日编程作业-Relu函数

news/2024/5/19 4:52:01/文章来源:https://blog.csdn.net/m0_57656758/article/details/127159195

目录

课堂笔记

代码实现1

运行结果1

代码实现2

评定一个学生的综合绩点

运行结果2

小结


课堂笔记

代码实现1

from cgi import print_environ
from functools import reduce
import numpy as np#定义感知器类
class perceptron(object):#感知器初始化函数(参数个数,激活函数)def __init__(self, input_num, activator):self.activator = activatorself.weights = [0.0 for _ in range(input_num)] #将每个参数对应权值设为0self.bias = 0.0 #偏置值设为0#输出训练所得权值与偏置值def __str__(self):return 'weights\t:%s\nbias\t:%f\n' % (self.weights, self.bias)#计算激活函数值def predict(self, input_vec):return self.activator(reduce(lambda a, b : a + b, map(lambda xw : xw[0] * xw[1], zip(input_vec, self.weights)), 0.0) + self.bias)#更新权重与偏置值def _update_weights(self, input_vec, output, label, rate):delta = label - output #计算预测值与真值之差self.weights = list(map(lambda xw : xw[1] + rate * delta * xw[0], zip(input_vec, self.weights))) #更新权重self.bias = rate + delta #更新偏置#迭代计算def _one_iteration(self, input_vecs, labels, rate):samples = zip(input_vecs, labels)for(input_vec, label) in samples:output = self.predict(input_vec) #计算激活函数值self._update_weights(input_vec, output, label, rate) #更新权值与偏置值#训练数据得权值、偏置值def train(self, input_vecs, labels, iteration, rate):for _ in range(iteration):self._one_iteration(input_vecs, labels, rate)#定义激活函数  f = lambda x: x
def f(x):return x#def get_training_dataset():#   input_vecs = [[0.2104,3],[0.1600,3],[0.2400,3],[0.1416,2],[0.3000,4]]#   labels = [0.400,0.330,0.369,0.232,0.540]#   return input_vecs, labels#def get_training_dataset():input_vecs = [[0,0],[-0.886041760444641,0],[0.520373702049255,0],[-1.20951724052429,-1.58113884925842],[1.57518529891968,1.58113884925842]]labels = [0.257084310054779,-0.440431356430054,-0.0518154688179493,-1.41695320606232,1.65211570262909]return input_vecs, labels#def get_training_dataset():input_vecs = [[0.434343457221985,0.5],[0.116161584854126,0.5],[0.621212124824524,0.5],[0,0],[1,1]]labels = [0.545454561710358,0.318181812763214,0.444805204868317,0,1]return input_vecs, labels#构建训练集
def get_training_dataset():input_vecs = [[5], [3], [8], [1.4], [10.1]] #输入向量列表,每一项是员工的工作年限labels = [5500, 2300, 7600, 1800, 11400] # 期望的输出列表,月薪,注意要与输入一一对应return input_vecs, labels#构建训练集训练感知器
def train_linear_unit():p = perceptron(1, f)input_vecs, labels = get_training_dataset()p.train(input_vecs, labels, 5, 0.0001) #初始设置:迭代10轮,学习率是0.01return p#主函数
if __name__ == '__main__':linear_unit = train_linear_unit()print(linear_unit)#顺便与标记对比一下 大概看一下训练效果 print ('Work 5 years, monthly salary = %.2f' % linear_unit.predict([5]))print ('Work 3 years, monthly salary = %.2f' % linear_unit.predict([3]))print ('Work 8 years, monthly salary = %.2f' % linear_unit.predict([8]))print ('Work 1.4 years, monthly salary = %.2f' % linear_unit.predict([1.4]))print ('Work 3.4 years, monthly salary = %.2f' % linear_unit.predict([3.4]))print ('Work 1.5 years, monthly salary = %.2f' % linear_unit.predict([1.5]))print ('Work 15 years, monthly salary = %.2f' % linear_unit.predict([15]))print ('Work 6.3 years, monthly salary = %.2f' % linear_unit.predict([6.3]))#if __name__ == '__main__':
#    linear_unit = train_linear_unit()
#   print(linear_unit)
#    print('[居住面积,房间数量] = [2104,3] 最终价格为:%.2f' % linear_unit.predict([2104,3]))
#    print('[居住面积,房间数量] = [1600,3] 最终价格为:%.2f' % linear_unit.predict([1600,3]))
#    print('[居住面积,房间数量] = [2400,3] 最终价格为:%.2f' % linear_unit.predict([2400,3]))
#    print('[居住面积,房间数量] = [1416,2] 最终价格为:%.2f' % linear_unit.predict([1416,2]))
#    print('[居住面积,房间数量] = [3000,4] 最终价格为:%.2f' % linear_unit.predict([3000,4]))

运行结果1

代码实现2

评定一个学生的综合绩点

影响该学生综合绩点的特征向量[x^{(i)}]包括学业绩点、学生工作、科研成绩和实践表现,每个特征参与评定的比重不同,即参数[w^{(i)}]不同,还规定有基础分b,我们通过训练样本数据集得到[w^{(i)}]可预测下一届学生的综合绩点。

from cgi import print_environ
from functools import reduce
import numpy as np#定义感知器类
class perceptron(object):#感知器初始化函数(参数个数,激活函数)def __init__(self, input_num, activator):self.activator = activatorself.weights = [0.0 for _ in range(input_num)] #将每个参数对应权值设为0self.bias = 0.0 #偏置值设为0#输出训练所得权值与偏置值def __str__(self):return 'weights\t:%s\nbias\t:%f\n' % (self.weights, self.bias)#计算激活函数值def predict(self, input_vec):return self.activator(reduce(lambda a, b : a + b, map(lambda xw : xw[0] * xw[1], zip(input_vec, self.weights)), 0.0) + self.bias)#更新权重与偏置值def _update_weights(self, input_vec, output, label, rate):delta = label - output #计算预测值与真值之差self.weights = list(map(lambda xw : xw[1] + rate * delta * xw[0], zip(input_vec, self.weights))) #更新权重self.bias = rate + delta #更新偏置#迭代计算def _one_iteration(self, input_vecs, labels, rate):samples = zip(input_vecs, labels)for(input_vec, label) in samples:output = self.predict(input_vec) #计算激活函数值self._update_weights(input_vec, output, label, rate) #更新权值与偏置值#训练数据得权值、偏置值def train(self, input_vecs, labels, iteration, rate):for _ in range(iteration):self._one_iteration(input_vecs, labels, rate)#定义激活函数  f = lambda x: x
def f(x):return x#def get_training_dataset():#   input_vecs = [[0.2104,3],[0.1600,3],[0.2400,3],[0.1416,2],[0.3000,4]]#   labels = [0.400,0.330,0.369,0.232,0.540]#   return input_vecs, labels#def get_training_dataset():
#    input_vecs = [[0,0],[-0.886041760444641,0],[0.520373702049255,0],[-1.20951724052429,-1.58113884925842],[1.57518529891968,1.58113884925842]]
#    labels = [0.257084310054779,-0.440431356430054,-0.0518154688179493,-1.41695320606232,1.65211570262909]
#    return input_vecs, labels#def get_training_dataset():
#    input_vecs = [[0.434343457221985,0.5],[0.116161584854126,0.5],[0.621212124824524,0.5],[0,0],[1,1]]
#    labels = [0.545454561710358,0.318181812763214,0.444805204868317,0,1]
#    return input_vecs, labels#构建训练集
#def get_training_dataset():
#    input_vecs = [[5], [3], [8], [1.4], [10.1]] #输入向量列表,每一项是员工的工作年限
#   labels = [5500, 2300, 7600, 1800, 11400] # 期望的输出列表,月薪,注意要与输入一一对应
#    return input_vecs, labels#构建训练集
def get_training_dataset():input_vecs = [[4.5,4.7,4.6,4.8],[4.5,4.0,4.6,4.7],[4.5,4.7,4.3,4.2],[4.7,4.6,4.5,4.3],[4.9,4.0,4.0,4.1],[4.1,4.9,4.8,4.9]]labels = [4.57,4.49,4.45,4.61,4.55,4.40]return input_vecs, labels#构建训练集训练感知器
def train_linear_unit():p = perceptron(4, f)input_vecs, labels = get_training_dataset()p.train(input_vecs, labels, 5000, 0.1) #初始设置:迭代10轮,学习率是0.01return p#主函数
if __name__ == '__main__':linear_unit = train_linear_unit()print(linear_unit)print('[学业绩点,学生工作,科研成绩,实践表现] = [4.5,4.7,4.6,4.8] 最终得分为:%.2f' % linear_unit.predict([4.5,4.7,4.6,4.8]))print('[学业绩点,学生工作,科研成绩,实践表现] = [4.5,4.0,4.6,4.7] 最终得分为:%.2f' % linear_unit.predict([4.5,4.0,4.6,4.7]))print('[学业绩点,学生工作,科研成绩,实践表现] = [4.5,4.7,4.3,4.2] 最终得分为:%.2f' % linear_unit.predict([4.5,4.7,4.3,4.2]))print('[学业绩点,学生工作,科研成绩,实践表现] = [5.0,5.0,5.0,5.0] 最终得分为:%.2f' % linear_unit.predict([5.0,5.0,5.0,5.0]))

运行结果2

weights :[0.592273500292354,0.09907395106529637,0.196892896023883,0.09729332034785503]
bias :0.064500
 
[绩点,学生工作,科研成绩,实践表现] = [4.5,4.7,4.6,4.8] 最终得分为:4.57
[绩点,学生工作,科研成绩,实践表现] = [4.5,4.0,4.6,4.7] 最终得分为:4.49
[绩点,学生工作,科研成绩,实践表现] = [4.5,4.7,4.3,4.2] 最终得分为:4.45
[绩点,学生工作,科研成绩,实践表现] = [5.0,5.0,5.0,5.0] 最终得分为:4.99

小结

事实上,一个机器学习算法其实只有两部分

模型 从输入特征x预测输出y的那个函数h(x)

目标函数 目标函数取最小(最大)值时所对应的参数值,就是模型的参数的最优值。很多时候我们只能获得目标函数的局部最小(最大)值,因此也只能得到模型参数的局部最优值

运用优化算法去求取目标函数的最小(最大)值。[随机]梯度{下降|上升}算法就是一个优化算法。针对同一个目标函数,不同的优化算法会推导出不同的训练规则

其实在机器学习中,算法往往并不是关键,真正的关键之处在于选取特征。选取特征需要我们人类对问题的深刻理解,经验、以及思考。而神经网络算法的一个优势,就在于它能够自动学习到应该提取什么特征,从而使算法不再那么依赖人类,而这也是神经网络之所以吸引人的一个方面。

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

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

相关文章

ASP.NET Core--项目基础与搭建

文章目录项目基础与搭建创建项目ViewImports.cshtmlappsettings.json执行顺序Program.cs类startup.cs类项目基础与搭建 创建项目 ViewImports.cshtml ViewImports文件可以影响文件夹层次结构中的所有视图 ViewImports文件是我们可以编写代码并放置通用指令以引入我们的视图所需…

数据结构 - 单链表

文章目录一、单链表1.单链表的定义1.1概念介绍2.如何用代码来定义一个单链表*知识点3.单链表的插入删除未完待续...一、单链表 1.单链表的定义 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的&…

Halcon快速入门笔记3

read_image (Image, ‘surface_scratch’) invert_image (Image, ImageInverted) get_image_size (ImageInverted, Width, Height) gen_sin_bandpass (ImageBandpass, 0.4, ‘none’, ‘dc_center’, Width, Height) fft_generic (ImageInverted, ImageFFT, ‘to_freq’, -…

【JavaWeb】前置知识:CSS与JavaScript知识汇总

本文被 系统学习JavaWeb 收录,点击订阅 写在前面 大家好,我是黄小黄!经过上一篇 从Html入门JavaWeb 的学习,想必大家对标签都有了一定的认识。本文将通过案例,讲解CSS与JavaScript的基础知识,文章内容比较…

SSM+Vue个人健康管理系统 个人健康档案系统 个人健康信息管理系统Java

SSM+Vue个人健康管理系统 个人健康档案系统 个人健康信息管理系统Java💖🔥作者主页:计算机毕设老哥🔥 💖精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻Java实战项目专栏 Python实战项目专栏 安卓实战项目专栏 微信小程序实战项目专栏目录Java实战项…

【数据结构从0到1】第九篇:图

文章目录一、图的基本概念二、图的存储结构2.1 邻接矩阵2.2 邻接表三、图的遍历3.1 图的广度优先遍历3.2 图的深度优先遍历四、最小生成树4.1 Kruskal算法4.2 Prim算法五、最短路径5.1 单源最短路径--Dijkstra算法5.2 单源最短路径--Bellman-Ford算法5.3 多源最短路径--Floyd-W…

基于Java开发的五子棋游戏APP设计与实现

目录 一、项目概述 1 (一)安卓游戏发展趋势 1 (二)开发安卓游戏的意义 1 二、项目需求分析 2 (一)功能需求分析 2 (二)性能需求分析 2 (三)可行性分析 3 &…

【点云处理】点云法向量估计及其加速(1)

点云法向量是3D点云一个极其重要的几何表面特征,众多的点云处理算法都依赖精确的法向量估计,例如点云分割,点云去噪等。在自动驾驶领域,面对特殊场景我们主要依赖点云法向量进行场景分割。估计点云法向量需要得到该点的邻域内点&a…

nodejs+vue+elementui幼儿园管理系统python java php

本设计主要分为学生家长,管理员和教师三个角色,其中学生家长功能有注册登查看幼儿信息,查看缴费信息,申请请假,查看体检信息等;教师的功能有登陆系统,对自己的幼儿学生,班级&#xf…

谷粒商城 集群篇 (二) --------- K8s 集群安装

目录一、kubeadm二、前置要求三、部署步骤四、环境准备五、安装环境1. 安装 docker① 卸载 docker② 安装 Docker-CE③ 配置 docker 加速④ 启动 docker & 设置 docker 开机自启2. 添加阿里云 yum 源3. 安装 kubeadm,kubelet 和 kubectl六、部署 k8s-master1. m…

STL之string

更新string,这段时间学习了stl,发现共性的东西很多,string,vector,list等,弄懂他们的逻辑框架很重要,其实也是stl的规范,文章更新内容不管这些函数怎么用,就从大逻辑来讲…

Java项目:SSH土地信息管理系统平台

作者主页:夜未央5788 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目包含管理员与用户两种角色; 管理员角色包含以下功能: 管理员登录,用户管理,分类管理,档案管理等功能。 用户角色包含…

基于STM32的光敏传感器数据采集系统-物联网应用系统设计项目开发

目录1 项目概述1.1 项目介绍1.2 项目开发环境1.3 小组人员及分工2 需求分析2.1 系统需求分析2.2 可行性分析2.3 项目实施安排3 系统硬件设计3.1 系统整体硬件电路设计3.2 STM32 最小系统电路设计3.3 传感器模块电路设计3.4 光敏电阻模块电路设计4系统软件设计4.1 系统整体流程设…

源码、反码、补码和精度损失

数据类型转换,转换过程中可能导致溢出或损失精度 1.源码:源码就是二进制的数字并且开头的一位代表符号位。例:(+1)的源码:0000 0001(-1)的源码:1000 0001 2.反码:正数的反码是其本身负数的反码是符号位不懂其他位取反例: (+1)的反码:0000 0001(-1)的反码:1111 …

TC8:TCP_CLOSING_03-13

TCP_CLOSING_03: RST with DATA 目的 TCP允许接收的RST消息包含数据 测试步骤 Tester:让DUT移动到ESTABLISHED状态Tester:发送RST报文,包含一些数据DUT:不发送任何响应Tester:验证DUT在CLOSED状态期望结果 3, DUT:不发送任何响应 4, Tester:验证DUT在CLOSED状态 CANoe …

谷歌味儿

咱们从小就被教育过,决定一个人成败的最重要因素不是智商、暂时的能力,而是性格和品质。这是如此的正确,以至于很多公司暗暗将这个作为候选人的衡量标准。比如咱们常听到的“X里味儿”。今天咱们看看“谷歌味儿“。谷歌内部明确要求的三大品质…

spring:beanfactory与applicationcontext的设计

beanfactory接口提供的方法:getBean,getBeanProvider,containsBean,isSingleton,getType,getAliases listableBeanFactory: 不会取到手动注册的bean,为什么要这么做呢,因为有些bean属于 SpringFramework 内部使用的,这样做的目的是 SpringFramework 不希望咱开发者直接…

恶意代码分析实战 windbg内核恶意代码分析 lab 10-1 10-2 10-3

Lab 10-01 本实验包括一个驱动程序和一个可执行文件。你可以从任意位置运行可执行文件,但为了使程序能够正常运行,必须将驱动程序放到C:\Windows\System32目录下,这个目录在受害者计算机中已经存在。可执行文件是Lab10-01.exe,驱动程序是Lab 10-01.sys. 问题 1.这个程序是否…

公众号网课搜题接口使用-公众号使用

公众号网课搜题接口使用-公众号使用 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台&…

(43)STM32——触摸屏实验笔记

目录 学习目标 成果展示 硬件知识 触摸屏 分类 区别 寄存器 控制命令寄存器(0X8040) 配置寄存器组(0X8047~0X8100) 产品 ID 寄存器(0X8140~0X8143) 状态寄存器(0X814E) …