一种计算纯电阻网络等效电阻的算法
引入
我们早就学过了计算串并联电阻的等效电阻的公式:
针对混合的电阻网络,有些时候我们依然可以反复运用这两个公式来计算等效电阻。在有些电阻网络中,这样是无法得到答案的:
如果你熟悉星三角变换,你应该能很快算出答案。(或者你能看出这就是一个平衡桥,那就能口算了)
星三角变换固然是一种手工计算等效电阻的很好方法,但是对于计算机而言,利用这个方法计算电阻会很麻烦。下面,我将使用高斯消元法来计算两点之间的等效电阻。
建模
我们可以把两点之间的纯电阻网络看作是一张有向图,节点表示导线,边表示电阻,边权表示电阻的大小。要求源点和汇点之间的等效电阻大小。
为什么要建成有向边呢,因为虽然电阻是无向的,但是电流是有向的,我们一开始并不知道电流的方向,但是可以任意地假定一个方向,然后给每一条边赋上一个电流IiI_iIi,当IiI_iIi为正,表示电流方向与箭头同向,当IiI_iIi为负,表示电流方向与箭头反向。然后我们再假定汇点的电势为000,其余每个节点赋上一个电势φi\varphi_iφi。
若要求源点到汇点的等效电阻,只需要知道源点的电势φs\varphi_sφs和汇点的电势φt\ ...
CS231n/EECS598 学习笔记(二)Lecture 5-7
Lecture 5
Neural Network
线性分类器的局限
Linear Classifier能做的其实很有限,从Lecture 3的“几何视角”中,我们知道了线性分类相当于画了一个超平面来将超空间分类。然而并非所有情况下样本点都可以被一个平面简单的分割。
一种方法是对原有数据集做一些变换,使得线性分类器能够分割变换后的数据。
这种方法的确能取得不错的结果,只需要人工提取出数据集的一些特征,然后用这些特征来训练线性分类器。比如,对于图像分类,可以设计算法来提取图像的边缘、颜色、纹理等特征,然后用这些特征来训练线性分类器。同时,也有一些data-driven的方法可以用来提取特征。
但是这种方法的缺点也很明显,就是研究者必须知道哪一些特征变换对于分类是有效的。而神经网络解决了这个问题。
或许,神经网络只是将特征提取的步骤和训练的步骤融合在了一起。
从线性分类器到神经网络
神经网络其实只是线性分类器的叠加
Linear Score Function: f=Wxf=\boldsymbol{W}xf=Wx
2-layer Neural Network: f=W2σ(W1x)f= ...
微分形式不变性以及dy,△y和f'(x)的区别和联系
初学微积分的时候,看到课本上证明所谓的“一阶微分形式不变性”看得云里雾里,想着“d𝑦=𝑓′(𝑥)d𝑥竟然也需要证?”.但当我仔细看了看微积分中导数𝑓′(𝑥),微分d𝑥的定义,明晰了以前一直混淆的概念,发现这确实需要证明.不禁又一次感叹微积分的严谨(上一次是理解𝜀 − 𝛿语言时)."
logrus库同时将日志输出到文件和stderr,并设置不同的formatter
背景
在Web项目开发中,日志记录是维护和调试程序的重要手段。logrus 是一个流行的Go语言日志库,提供了丰富的日志级别和格式定制能力。logrus它支持 JSONFormatter 和 TextFormatter 两种格式化器,允许开发人员根据不同的场景,选择最合适的日志输出格式。
JSONFormatter
JSONFormatter 将日志信息输出为JSON格式,这被称为"结构化日志"。结构化日志易于程序解析,非常适合于传输到日志分析系统,如ELK Stack(Elasticsearch、Logstash、Kibana),以便进行集中管理和分析。
JSONFormatter的输出示例:
1{"level":"info","msg":"Server started.","time":"2024-04-07T16:14:36+08:00"}
TextFormatter
与JSON相对,TextFormatter 输出的日志 ...
CS231n/EECS598 学习笔记(一) Lecture 1-4
课程介绍
Deep Learning for Computer Vision是一门介绍深度学习在计算机视觉中的应用的课程,本课程中介绍了如何实现、训练和调试自己的神经网络,并详细展示了计算机视觉的前沿研究。课程中还包括一些训练和微调视觉识别任务网络的实用工程技巧。CS231n是斯坦福大学的版本,由于这门课程在网络上最新的版本是2017年比较早,因此我选择了教学大纲基本相同,但有额外扩充内容的另一门课程,密歇根大学的EECS498/598,这门课在网上公开的最新版本是FA2019。
课程相关链接:
https://web.archive.org/web/20230328031120/https://web.eecs.umich.edu/~justincj/teaching/eecs498/FA2020/
http://cs231n.stanford.edu/schedule.html
课后作业答案
下面是我的作业解答链接
https://github.com/cyrus28214/EECS598-solutions
Lecture 1
对计算机视觉做了简单的引入,主要介绍了计算机视觉的 ...
学会Emmet语法,告别手打HTML和CSS
前言
有时候,写前端代码更像是一种体力活。在前端的世界,你经常需要写出重复嵌套的HTML元素,冗长的CSS样式。俗话说:不会偷懒的程序员不是好程序员,如果你还在手写HTML和CSS代码,那你必须要知道Emmet,这个可以显著加快你的代码速度的插件。
介绍
Emmet是一个可以极大加速web开发工作流的工具。Emmet为HTML/XML和CSS设计了一套便于记忆和使用的缩写,你只需要键入这些缩写,就可以自动展开成相应的代码。
安装
Emmet支持几乎所有的编辑器。包括VSCode、Sublime、Atom、WebStorm、Vim、Emacs等等。
如果你是用的是宇宙第一编辑器——VSCode,那么你不需要做任何事,因为VSCode默认集成了Emmet,不需要安装任何VSCode扩展。Emmet功能会在html、xml、css、sass、php等类型的文件中启用。详见https://code.visualstudio.com/docs/editor/emmet#_how-to-expand-emmet-abbreviations-and-snippets
如果你是其他编辑器的用户,这 ...
用Java中的Record(记录类)简化代码
简介
Record是从Java 14开始引入的新特性,Record提供了一种简洁高效的方式来创建不可变类。
引入
使用Java进行开发的时候,程序员经常会创建一些不可变类专门用于承载数据(也就是MVC模型中的model),这些类可能涉及大量的样板代码,包括:
大量的private、final、public关键字
每个字段的getter
重写equals()、hashCode()、toString()方法
例如以下代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657package example;import java.util.Objects;public final class Person { private final Long id; private final String name; private final Integer age; // 构造函数 public ...
OSI七层网络模型
概念
OSI模型(Open Systems Interconnection model)是由国际标准化组织(ISO)制定的一种用将各个计算机连接成网络的标准框架。
OSI模型将通信系统中的数据流划分成8层,从上至下分别是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。每一层都在下一层的基础上构建,为其上一层提供功能。从一台计算机发送信息到另一台计算机时,这些信息会从N层开始,向N-1层传递,直到物理层,使用物理的线路进行传输,传输到另一台计算机后,再从低至高解析数据,直到第N层,再交给某个应用程序处理。
OSI是一种概念模型,这意味着OSI并没有规定具体的实现,而只是描述了一些概念,用来为实际的标准制定和开发提供参考。也就是说,对于同一层可能有多种不同的协议来实现。
应用层(Application Layer)
应用层是最贴近用户的一层,应用程序通过网络传输数据,根据程序的功能,处理数据、为用户提供图形界面、发送数据等。直接为网络应用提供服务。
具体的应用举例:浏览器、QQ
应用层的网络协议有:HTTP(上网协议)、FTP(文件传输协议)、SMTP(电子邮件传输协议)等 ...
理解Cookie、Session和Token
身份验证
Web应用经常需要对用户进行身份验证,才能判定用户的权限,决定用户能访问哪些资源。比如只有你才能看到自己的私密QQ相册,比如只有老师才能看到智学网中全班同学的成绩,同学只能看到自己的。
身份验证需要在服务器和客户端之间交换和保存数据,比如当你登录了一个网站,你并不希望下次登录的时候还要输入账号密码,需要建立一些机制,保存这个登录的状态,告诉服务器“是我,我不久前刚刚登录过”。于是就有了以下这些概念。
Cookie
cookie,就是曲奇饼干一小段储存在客户端(浏览器)的数据。cookie可以用来保存状态,不仅仅是账户的登录状态,也可能包括一些设置、浏览记录等。
cookie是由服务器生成,储存在客户端的数据。目的是为了保存一些状态,让服务器知道这次请求和之前的请求发送自相同的客户端。
机制
当服务器想要向客户端添加cookie的时候,服务器会在response headers中添加Set-Cookie项,然后浏览器会保存Set-Cookie中的值。之后每次访问相同站点的时候,都会带上相同的数据,放在Cookie中。当然,服务器那里也要保存一份cookie,用于比对验证。
用 ...
基于SVD的图像压缩算法
理论基础
详见奇异值分解
奇异值分解(SVD)可以将任意矩阵分解为A=u1σ1v1∗+u2σ2v2∗+⋯+urσrvr∗=UΣVT\boldsymbol{A}=\boldsymbol{u}_1\sigma_1\boldsymbol{v}^* _1 + \boldsymbol{u}_2\sigma_2\boldsymbol{v}^* _2 + \dots + \boldsymbol{u}_r\sigma_r\boldsymbol{v}^*_r=\boldsymbol{U \Sigma V}^\mathrm{T}A=u1σ1v1∗+u2σ2v2∗+⋯+urσrvr∗=UΣVT的形式。并且越靠近后面的项越不重要,去除它们就可以用更小的空间储存一个与原来矩阵相近的矩阵。
若将图像看作RGB三通道的三个矩阵,对图像SVD并保留前kkk项,就可以实现图像压缩。
效果展示&分析
可以看到,当压缩率在0.5以上时,图像基本保持原本的细节,压缩率0.5以下时,逐渐丢失了细节。
画出σk\sigma_kσk曲线。可以看到σk\sigma_kσk随kkk的增加先急剧降低,后 ...