深度学习线性回归的代码实现
深度学习线性回归的代码实现
线性回归是深度学习中最简单也是最基础的模型,理解它对后面的学习是非常有帮助的。本文将使用 “小批量随机梯度下降” 的优化方法手动从零开始实现一个基本的线性回归预测,厘清它的工作细节,同时在最后也会再调用 PyTorch 实现一遍。
◇ 从零开始实现
▷ 生成数据集
为了简单起见,我们根据带有噪声的线性模型构造一个人造数据集,然后使用这个有限样本的数据集来恢复这个模型的参数。本次使用的是低维数据,这样可以很容易地将其可视化。
下面的代码生成了一个包含 1000 个样本的数据集,每个样本包含从标准正态分布中采样的 2 个特征,这样合成的数据集是一个矩阵 X∈R1000×2\boldsymbol X\in\mathbb{R}^{1000\times2}X∈R1000×2。
本次使用线性模型参数 w=[2,−3.4]⊤\boldsymbol w=\left[2,-3.4\right]^\topw=[2,−3.4]⊤,b=4.2b=4.2b=4.2 和噪声项 ε\varepsilonε 生成数据集及其标签:
y=Xw+b+ε\boldsymbol y=\boldsym ...
服务器项目集合
服务器项目集合
◇ Nginx Proxy Manager
官方文档:https://nginxproxymanager.com/
docker-compose:
1234567891011121314version: '3.8'services: nginx-proxy-manager: image: 'jc21/nginx-proxy-manager:latest' container_name: nginx-proxy-manager restart: unless-stopped ports: - '80:80' - '81:81' - '443:443' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt - ./html:/html
部署静态网站:
在 Advanced 一栏填入以下配置:
123location / ...
Linux 相关汇总
Linux 相关汇总
◇ 目录结构
◇ 命令相关
▷ 多用户相关
1234567891011121314151617181920212223# 创建用户adduser <user_name># 将用户加入到 sudo 用户组usermod -aG sudo <user_name># 切换用户,目录不改变# 需要输入目标用户的密码su <user_name># 切换用户,同时改变目录# 需要输入目标用户的密码su - <user_name># 临时以交互模式启动 root shell,会改变目录# 需要输入当前用户的密码sudo -i# 退出 root shellexit# 临时以特定用户的身份打开一个新的终端会话,会改变目录# 需要输入当前用户的密码sudo -i -u <user_name># 退出exit
▷ 文件相关
12345678910111213141516171819202122232425262728293031323334353637383940414243# 创建一个空文件或更新已存在文件的时间戳touc ...
深度学习零碎知识点
深度学习零碎知识点
求导:
GCC 相关汇总
GCC 相关汇总
◇ 编译过程
一个 C/C++ 文件要经过预处理 (preprocessing)、编译 (compilation)、汇编 (assembly) 和链接 (linking)
等 4 步才能变成可执行文件:
预处理 (Preprocessing): 在编译过程的开始阶段,预处理器会处理源代码。这包括宏替换、头文件包含、条件编译等操作。
编译 (Compilation): 编译器将预处理后的源代码转换为汇编语言或直接生成目标机器代码。
汇编 (Assembly): 汇编器将汇编语言代码转换为机器代码。在一些高级语言的编译过程中,这一步骤可能被省略。
链接 (Linking): 链接器将多个目标文件及其依赖关系合并成一个可执行文件。这包括解决符号引用、地址重定向等操作。
flowchart TD
hello.c --"预处理:(xxx-gcc -E -o hello.i hello.c)"-->
hello.i --"编译:(xxx-gcc -S -o hello.s hello.i)"-->
he ...
深度学习习题与总结
深度学习习题与总结
◇ 2.5 自动微分
▷ 5. 使f(x)=sin(x)f(x)=sin(x)f(x)=sin(x),绘制f(x)f(x)f(x)和df(x)dx\frac{df(x)}{dx}dxdf(x)的图像,其中后者不使用f′(x)=cos(x)f'(x)=\cos(x)f′(x)=cos(x)。
代码:
12345678910111213141516171819202122232425262728293031323334import torchimport matplotlib.pyplot as plt# import numpyx = torch.arange(0, 10, 0.1)x.requires_grad_(True)y = torch.sin(x)y.sum().backward()print(f"x = \n {x}")print(f"x.detach() = \n {x.detach()}")print(f"x.detach().numpy() = \ ...
Python 相关汇总
Python 相关汇总
◇ 包管理
▷ PIP
简单预览当前环境下的依赖包可以直接用 pip list 命令:
123456789$ pip listPackage Version------------------ ---------certifi 2023.7.22charset-normalizer 3.3.2idna 3.4pip 23.2.1requests 2.31.0urllib3 2.0.7
如果想要将这个信息记录下来,可以用 pip freeze 命令,记在 requirements.txt 中 (一个约定俗成的名字):
12345678$ pip freeze > requirements.txt$ cat requirements.txtcertifi==2023.7.22charset-normalizer==3.3.2idna==3.4pipdeptree==2.13.1requests==2.31.0urlli ...
深度学习环境搭建
深度学习环境搭建
◇ Miniconda
Miniconda 官方地址:https://docs.conda.io/projects/miniconda/en/latest/miniconda-other-installer-links.html
复制适合自己机器的版本链接,进行安装:
12wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.9.0-0-Linux-x86_64.shbash Miniconda3-py38_23.9.0-0-Linux-x86_64.sh
安装完成后会有如下提示:
12345678Do you wish to update your shell profile to automatically initialize conda?This will activate conda on startup and change the command prompt when activated.If you'd prefer that conda's base enviro ...
使用 Python 脚本自动创建或更新文件到 Gist
使用 Python 脚本自动创建或更新文件到 Gist
最近有一个配置文件需要多端同步,每次把文件传来传去感觉很麻烦。后来想想感觉放 Gist 是个比较合适的选择,但是去网页端粘贴更麻烦。
突然想起本人浏览器上安装的书签同步拓展就是借助 Gist 同步的,那它到底是怎么实现的呢?于是打算自己去看看 Github 官方的 api 文档,没想到其实比想象中的简单,所以写本篇文章记录一下要点。
◇ 官方文档
官方 api 文档地址:https://docs.github.com/zh/rest/gists
这里主要是使用里面的 2 个功能:“创建” 和 “更新”。
▷ 创建 Gist
- 请求
在文档中官方给出了一个示例,是使用 curl 调用的:
1234567curl -L \ -X POST \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2 ...
利用 Frp 实现内网穿透
利用 Frp 实现内网穿透
Frp 项目官方地址:https://github.com/fatedier/frp/
◇ 服务端
▷ 安装
使用以下命令查看服务端架构:
12$ archx86_64
根据架构不同,选择相应版本并进行下载:
12345cdmkdir -p project/frpcd project/frpwget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
然后解压文件:
1234# 解压到当前目录tar -zxvf frp_0.22.0_linux_amd64.tar.gz# 重命名文件夹mv frp_0.22.0_linux_amd64 program
tar 用于压缩和解压文件和目录:
-z: 表示使用 gzip 来解压缩文件。.tar.gz 文件通常是经过 gzip 压缩的。
-x: 表示解压缩操作,即从 .tar.gz 文件中提取文件和目录。
-v: 用于启用详细的输出,以便查看解压缩过程中提取的文件。
-f: 指定要解压缩的 . ...
Vim 相关汇总
Vim 相关汇总
◇ 基础命令
1234567:w # 保存文件:q # 退出:wq # 保存并退出:q! # 不保存强制退出Esc # 返回正常模式h j k l # 左、下、上、右移动光标
12345678910111213141516171819202122232425i # 编辑模式,在当前光标位置前插入I # 在当前行开头插入a # 编辑模式,在当前光标位置后插入A # 在当前行末尾插入s # 删除光标处的字符,并开启编辑模式S # 删除当前行,并开启编辑模式cc # 修改当前行x # 删除光标处的字符X # 删除光标前的字符o # 光标下方插入一个空行,并开启编辑模式 (小写字母 o)O # 光标上方插入一个空行,并开启编辑模式 (大写字母 O)v ...
使用 Docker 构建并部署自己的网页到服务器
使用 Docker 构建并部署自己的网页到服务器
之前有一个网页是部署在 Github Pages 上的,现在在服务器上部署一下,顺便练习一下 Docker 的使用。
因为服务器是临时的,所以没有绑定域名,简单拿 IP + 端口 访问一下。
◇ 制作并发布 Docker 镜像
▷ 编写 Dockerfile 文件
进入项目的根目录,新建一个文本文件 .dockerignore,将打包 image 时需要排除的路径填写到文件中:
12345.git.github.gitignoreREADME.mdxxx.txt
然后新建一个文本文件 Dockerfile,指定构建的过程和方法。本次是基于 Nginx 构建的,内容如下:
1234FROM nginx:1.24-alpineCOPY . /usr/share/nginx/htmlEXPOSE 80CMD [ "nginx", "-g", "daemon off;" ]
▷ 使用 Github Actions 构建并发布镜像文件
使用 Action 的好处是可以确保环境干净,同时可 ...
使用 AList 搭建云盘聚合平台
使用 AList 搭建云盘聚合平台
◇ 安装
💡 建议 Alist (参见) 和 Aria2 (参见) 分开部署,方便进阶配置。
这里使用 Docker 部署:
使用的是内建 aria2 的版本,镜像地址:https://hub.docker.com/r/xhofe/alist-aria2
▷ 直接部署
输入以下命令:
1docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5288:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist-aria2" xhofe/alist-aria2:latest
-d 表示在后台启动。
-v 表示将主机的 /etc/alist 目录映射到 Docker 容器的 /opt/alist/data 目录。
-e 设置环境变量。
PUID 表示容器内运行的进程的用户 ID, 0 表示 root 用户权限。
PGID 表示容器内运行的进程的用户组 ID,0 表示 root 用户组权限。
UMASK 是一个文件 ...
Ubuntu 相关汇总
Ubuntu 相关汇总
◇ 服务器相关
今天试用了阿里云 ECS,简单记录一下使用过程,供日后参考。
操作系统选择的是 Ubuntu 22.04 Uefi 版。
创建实例后,使用 Finalshell 进行连接。
Finalshell 官网地址:https://www.hostbuf.com/t/988.html
▷ 更新软件和数据
连接后,可以先更新一下数据,当前是 root 用户模式:
12345# 更新本地软件包仓库的元数据apt update# 更新所有软件包到最新版本apt upgrade
更新过程中会出现:
这里选择了系统默认选项:No。
kexec 是一个工具,允许在不完全重启计算机的情况下加载新内核,可以提高系统升级的效率。
如果只是执行 apt upgrade 并且希望立即应用系统更新,而无需完全重启系统,可以选择 kexec。这样可以节省重启所需的时间,它仅加载新内核,而不重新引导整个系统。
如果更偏向传统的完全系统引导过程,或者担心 kexec 可能会引起系统稳定性问题,可以选择不执行 kexec,让系统通过完整的系统引导加载程序过程进行重启。这样,可以确保系统 ...
Docker 初体验
Docker 初体验
经常在各个地方看到 Docker,关于什么是 Docker,官方文档已经给了专业详尽的解释,个人粗浅的理解是它不仅将应用程式,还将应用程式所需要的环境和各种依赖一起打包成了一个盒子,当我们使用这个应用程式时,直接“打开”盒子就能用,不需要本机电脑再安装配置什么,因为需要的东西盒子里已经都有了。
那这样有什么用呢?对于个人开发者来说,假如设备同时运行着几个项目,而这些项目所需要的环境各有不同,如果不用 Docker,可能就会相互冲突了。
而对于公共项目来说,假如一个用户数量庞大的公共项目,每个人的设备各有不同,有的安装了 A 的这个版本,有的安装了 B 的那个版本,有的只安装了一部分,怎么保证这个项目能在所有设备上正常平稳地运行呢?直接连同所用的环境打包成 Docker 是个不错的选择。
由于 Docker 能够轻松地封装应用程序和其依赖项,所以大大方便并简化了应用程序的部署和使用。
◇ Docker 的用途
Docker 的主要用途,目前有 3 大类:
提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
提供弹性的云服务。因为 ...