自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 软构--ADT

除了编程语言所提供的基本数据类型和对象数据类型,程序员可定义 自己的数据类型数据抽象:由一组操作所刻画的数据类型传统的类型定义:关注数据的具体表示抽象类型:强调“作用于数据上的操作”,程序员和 client无需关心数据如何具体存储的,只需设计/使用操作即可ADT是由操作定义的,与其内部如何实现无关比如,我们在讨论List类型时,不考虑其数据结构,而是考虑到operation,get、size等等一个构造器可以接受参数,但是不能以被构建的对象作为参数也可以不是构造器。

2023-05-26 15:02:20 95

原创 软构--面向正确性与健壮性的软件构造

健壮性:系统在不 正常输入或不正常外部环境下仍能够表现正常的程度处理未期望的行为和错误终止即使终止执行,也 要准确/无歧义的向用户展示全面的错误信息错误信息有助于进行debug总是假定用户恶意、假定自己的代码可能失败把用户想象成白痴,可能输入任何东西因此,开发者需要使程序能够返回给用户的错误提示信息要详细、准确、无歧义,这样更容易解决问题总的来说对别人宽容点,对自己狠一点,对自己代码保守,对用户行为开放封闭实现细节,限定用户的恶意行为。

2023-05-26 15:01:16 666

原创 软构--面向维护性的软件构造技术

软件维护:修复错误、改善性能软件演化:对软件进行持续的更新软件的大部分成本来自于维护阶段“变化”在软件生命周期中是不可避免的!如何在最初的设计中充分考虑到未来的变化,避免因为频繁变化导致软件复杂度的增加和质量的下降?因此。

2023-05-20 23:12:35 106

原创 软构--面向复用的软件构造技术

最主要的复用是在代码层面,但软件构造过程中的任何实体都可能被复用。

2023-05-20 22:12:49 101

原创 软件构造--软件开发几种模型

迭代:开发出来之后由用户试用/评审,发现问题反馈给 开发者,开发者修改原有的实现,继续交给用户评审。循环往复这个过程,直到用户满意为止。时间代价高,但开发质量也高。进度被视为稳步向下流动(像瀑布一样),易于使用,但事后更改的成本高得令人望而却步。在原型上持续不断的迭代 发现用户变化的需求,原型通过后再进行具体的设计和实现。Agile = 增量 + 迭代 每次迭代处理一个小规模增量。通过快速迭代和小规模的持续改进,以快速适应变化。通过小的迭代,不断把变化加入。

2023-05-16 14:24:44 54

原创 软件构造-质量指标

分为外部质量因素和内部质量因素外部质量因素 影响 用户内部质量因素 影响 软件本身和它的开发者外部质量取决于内部质量易于理解:优雅和漂亮的代码/可理解性-随时准备更改:可维护性和适应性-开发成本低:为重用而设计:可重用性-安全的bug:健壮性—高效运行:性能。

2023-05-15 21:54:30 64

原创 软件构造-视图

首先,要了解软件构造的对象是什么?如何刻画?如何构造?将要从三个维度来看软件系统的构成,这是对软件系统的刻画,而软件构造可以看作是不同视图之间的转换还有知道构造的结果和过程如何算好,这是质量目标。

2023-05-15 21:36:38 67

原创 软构-工厂方法

但是由于需求的变化,需要创建的对象经常发生变化,比如说这里有一个类CircularOrbit,AtomStructure和StellarSystem是对CircularOrbit类的继承,有可能原先需要创建的对象是AtomStructure,但是由于需求的变化,StellarSystem才是最终需要创建的对象,如果采取原先的创建对象方式:直接new一个具体的类,更改会比较麻烦,需要大量改变原有代码。如果需要更换创建的对象实例,直接在工厂方法内创建新的子类即可,不需要对原代码更改,也满足了OCP原则。

2023-04-29 17:34:38 50

原创 动手学习机器学习(Day9数值稳定性+模型初始化和激活函数)

数值过大或过小会导致数值问题常发生在深度模型中,因为其会对n个数类乘合理的权重初始值和激活函数的选取可以提升数值稳定性。

2023-04-28 18:49:28 151

原创 动手学习机器学习(Day8丢弃法Dropout)

丢弃法将一些输出项随机置0来控制模型复杂度常作用在多层感知机的隐藏层输出上丢弃概率是控制模型复杂度的超参数dropout随机丢弃,如果想要保持结果可重复性,需要控制随机的seed,一个是randn的seed,一个是dropout参数,平时没必要可重复丢弃法在训练时把某些神经元丢弃,在此时的训练不把这些神经元的参数更新,而在预测时网络中的神经元是没有丢弃的。

2023-04-28 18:46:57 98

原创 动手学习机器学习(Day7权重衰退)

权重衰退通过L2正则项使得模型参数不会过大,从而控制模型复杂度正则项权重是控制模型复杂度的超参数。

2023-04-26 21:18:59 57

原创 动手学习机器学习(Day6模型选择+过拟合和欠拟合)

如果简单数据选择了高模型容量,出现过拟合,比如在一个很简单的数据集上用一个特别深的神经网络,神经网络会把每一个样本记住,缺失泛化性。过拟合会导致模型过于注意细节,同时把很多噪点记住。模型先足够大,再通过各种手段让泛化误差往下降。复杂数据采用低模型容量,会欠拟合,精度不够。

2023-04-26 21:12:10 77

原创 动手学习机器学习(Day5多层感知机)

多层感知机使用隐藏层和激活函数来得到非线性模型常用激活函数是Sigmoid,Tanh,ReLU使用Softmax来处理多类分类超参数为隐藏层数,和各个隐藏层大小。

2023-04-12 20:12:37 99

原创 动手学习机器学习(Day4)

理解:对于y_hat第0行和第1行,识别到y标签的概率,即第0行识别为0的概率和第一行识别为2的概率,分别为0.1,0.5,即y_hat第一个索引为行索引,指明在y_hat的范围内,而y作为真实标签,结果就是y_hat识别真实标签的概率。0是将列压扁,把行的各项相加,变为1行,1是将行压扁,把列的各项相加,变为1列。,其中包含2个样本在3个类别的预测概率,以及它们对应的标签。精度计算:(这里用到了Accumulator)分别用于存储正确预测的数量和预测的总数量。实例中创建了2个变量,

2023-04-11 21:05:04 51

原创 动手学习机器学习(Day3-2)

我们将使用类似MNIST但更复杂的Fashion-MNIST数据集。

2023-04-10 21:52:37 55

原创 动手学习机器学习(Day3-1)

从一个图像分类问题开始。假设每次输入是一个2×2的灰度图像。我们可以用一个标量表示每个像素值,每个图像对应四个特征x1​x2​x3​x4​。此外,假设每个图像属于类别“猫”“鸡”和“狗”中的一个。如何表示标签?采用独热编码(one-hot encoding)。标签y将是一个三维向量, 其中(1,0,0)对应于“猫”、(0,1,0)对应于“鸡”、(0,0,1)对应于“狗”

2023-04-10 20:14:04 372

原创 软构lec12-上

健壮性:系统在不 正常输入或不正常外部环境下仍能够表现正常的程度处理未期望的行为和错误终止即使终止执行,也 要准确/无歧义的向用户展示全面的错误信息错误信息有助于进行debug总是假定用户恶意、假定自己的代码可能失败把用户想象成白痴,可能输入任何东西因此,开发者需要使程序能够返回给用户的错误提示信息要详细、准确、无歧义,这样更容易解决问题总的来说对别人宽容点,对自己狠一点,对自己代码保守,对用户行为开放封闭实现细节,限定用户的恶意行为。

2023-04-10 20:12:41 47

原创 动手学习机器学习(Day2-2)

def linreg(X , w , b) : """线性回归模型""" return torch . matmul(X , w) + bdef squared_loss(y_hat , y) : """均方损失""" return(y_hat - y . reshape(y_hat . shape)) ** 2 / 2y_hat:预测值y:真实值虽然 y_hat 和 y 元素个数是一样的,但是可能他们一个是行向量一个是列向量,因此需要使用reshape进行统一。

2023-04-09 22:07:31 136

原创 动手学习机器学习(Day2-1)

被遮挡部分(m, l, k, n)线性回归是对n维输入的加权,外加偏差使用平方损失来衡量预测值和真实值的差异线性回归有显示解(其他模型都没有显示解)线性回归可以看做单层神经网络梯度下降通过不断沿着反梯度方向更新参数求解小批量随机梯度下降是深度学习默认的求解算法两个重要的超参数是批量大小和学习率。

2023-04-09 21:59:44 83

原创 动手学习机器学习(Day1)

进入Linux环境进入conda环境:进入之后安装完成后解压后有三个文件夹: 但是这个版本和教学版本有一点差别,教学版本是幻灯片形式可以从GitHub上clone以下使用slide版本的需要加装插件:如何ssh将阿里云jupyter映射到本地8888端口:先开启ssh远程登录:![[Pasted image 20230408194235.png]]在本地电脑建立映射:在神经网络中,数据通常以数组方式呈现,因此要熟悉数组操作切片:创建数组: 同样可行重构数组:查看数组信息:torch数组是向量

2023-04-09 21:04:19 202

原创 Git学习

找到了原先学习git过程中写的资料参考资料:“https://www.liaoxuefeng.com/wiki/896043488029600”

2023-04-09 20:58:33 32

原创 软件构造--Poetic walks

由于不知道表示这两个单词的点原先是否已经存在边,先加入一条单词1到单词2,权为1的边,获取返回值,返回值表示的是加入边之前两点之间的边权值。判断返回值,如果返回值为0,说明原先不存在边,不用改动,因为已经set了一条权值为1的边,如果返回值不为0,说明两点间之前存在边,将原先边权值+1再存入图中。对于input的一个句子,对于每一对单词w1、w2,在图中寻找是否存在w1-b-w2,若存在多组满足要求的b,选择权重是最大的一条路径。图中的顶点是单词,单词被定义为非空非换行符组成的字符串,不分大小写。

2023-04-05 23:04:55 48

原创 Data100 Lec3笔记

实践上,[]更加常用对于许多常见的用例来说,[]的语法更加简洁[]在现实世界中比loc更常见。

2023-04-03 19:35:01 70

原创 Data100 Lab1

该Lab旨在熟悉JupyterHub,Python、numpy和一个可视化库matplotlib会导致OK_FORMAT未定义,无法运行test,在test.py的文件第一行加上后,就能解决问题。

2023-04-03 14:56:06 91

原创 软构实验二--图

可以发现,关于边的记录只是一个String类型的Set,没有详细的信息,因此需要在vertices类中存储较多的信息。equals方法需要对两个Edge类型的实例进行相等性判断,需要对两条边的起始点、终点、权值进行判断,是否都是相等的。便利边集,若发现和set的边相同的边,先把这条边删除,并记录下旧value值,随后根据weight值选择加或不加边。是一个静态方法,因此只能有一次实现,而我们只运行所有测试一次,而在给出的测试中已经使用过该方法,因此不能再使用。他们再语料库中由空格、换行或者问卷末尾分隔。

2023-03-28 00:28:32 54

原创 Gitlet——简化版Git

gitlet

2023-03-04 18:14:36 720

原创 软构--Java学习

java学习笔记

2023-03-04 16:25:16 35

原创 这个账号将会发布软构的博客

关于软构

2023-02-21 22:18:23 46

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除