chore: Syntax Highlighting

This commit is contained in:
camera-2018
2023-08-15 01:03:42 +08:00
parent 9351ddc524
commit 4ce9a285d8
9 changed files with 48 additions and 43 deletions

View File

@@ -99,15 +99,21 @@ cs61a 绝对是一个挑战,但是我们都希望你学习并且成功,所
要使用 Ok 来运行指定函数的 doctests请运行以下命令
```python3 ok -q <specified function> #会和你要补充的代码一起给出```
```bash
python3 ok -q <specified function> #会和你要补充的代码一起给出
```
默认情况下,只有没有通过的测试才会出现。你可以使用-v 选项来显示所有的测试,包括你已经通过的测试
```python3 ok -v```
```bash
python3 ok -v
```
有时我们会看到类似这样的 ok 指令
```python3 ok -q control -u```
```bash
python3 ok -q control -u
```
在终端中输入后,需要按照要求回答问题,有些时候会做为某些函数测试的前置条件

View File

@@ -17,7 +17,7 @@ Pip 在通过 python 官网下载 python 并安装时可以选择同时安装 pi
3. 对于 Windows 用户,在 C:\Users\xx\pip 目录下(没有 pip 目录就新建)创建一个 pip.ini 文件,并将下面代码块中内容复制进去:
4. 对于 Linux 用户,同样在~/.pip/pip.conf 进行配置。如果没有.pip 目录就新建,然后将下面代码块中内容复制进去:
```
```bash
[global]
index-url = http://pypi.douban.com/simple
extra-index-url = https://pypi.mirrors.ustc.edu.cn/simple/

View File

@@ -20,7 +20,7 @@ PyTorch 中的 Dataset 类是一个抽象类,它可以用来表示数据集。
下面我们来编写一个简单的例子,看下如何使用 Dataset 类定义一个 Tensor 类型的数据集。
```
```python
import torch
from torch.utils.data import Dataset
@@ -43,7 +43,7 @@ class MyDataset(Dataset):
然后我们来看一下如何调用刚才定义的数据集。首先随机生成一个 10*3 维的数据 Tensor然后生成 10 维的标签 Tensor与数据 Tensor 相对应。利用这两个 Tensor生成一个 MyDataset 的对象。查看数据集的大小可以直接用 len() 函数,索引调用数据可以直接使用下标。
```
```python
# 生成数据
data_tensor = torch.randn(10, 3)
target_tensor = torch.randint(2, (10,)) # 标签是0或1
@@ -67,7 +67,7 @@ DataLoader 是一个迭代器,最基本的使用方法就是传入一个 Datas
DataLoader 类的调用方式如下:
```
```python
from torch.utils.data import DataLoader
tensor_dataloader = DataLoader(dataset=my_dataset, # 传入的数据集, 必须参数
batch_size=2, # 输出的batch大小
@@ -143,7 +143,7 @@ MNIST 数据集是 ubyte 格式存储,我们先将“训练集图片”解析
以 MNIST 为例,我们可以用如下方式调用:
```
```python
# 以MNIST为例
import torchvision
mnist_dataset = torchvision.datasets.MNIST(root='./data',
@@ -173,7 +173,7 @@ torchvision.datasets.MNIST 是一个类,对它进行实例化,即可返回
如果想要查看 mnist_dataset 中的具体内容,我们需要把它转化为列表。(如果 IOPub data rate 超限,可以只加载测试集数据,令 train=False
```
```python
mnist_dataset_list = list(mnist_dataset)
print(mnist_dataset_list)
```
@@ -182,7 +182,7 @@ print(mnist_dataset_list)
这里图像数据是 PIL.Image.Image 类型的,这种类型可以直接在 Jupyter 中显示出来。显示一条数据的代码如下。
```
```python
display(mnist_dataset_list[0][0])
print("Image label is:", mnist_dataset_list[0][1])
```

View File

@@ -27,7 +27,7 @@ Torchvision 库中的 torchvision.transforms 包中提供了常用的图像操
我们来看一个具体的例子加深理解。将图片进行一下数据类型的相互转换。具体代码如下:
```
```python
from PIL import Image
from torchvision import transforms
@@ -68,7 +68,7 @@ torchvision.transforms 提供了丰富的图像变换方法,例如:改变尺
将输入的 PIL Image 或 Tensor 尺寸调整为给定的尺寸,具体定义为:
```
```python
torchvision.transforms.Resize(size, interpolation=2)
```
@@ -81,7 +81,7 @@ torchvision.transforms.Resize(size, interpolation=2)
在 resize 之后呢,一般会接一个 crop 操作crop 到指定的大小。对于高与宽接近的图片来说,这么做问题不大,但是高与宽的差距较大时,就会 crop 掉很多有用的信息。关于这一点,我们在后续的图像分类部分还会遇到,到时我在详细展开。
```
```python
from PIL import Image
from torchvision import transforms
@@ -105,7 +105,7 @@ torchvision.transforms 提供了多种剪裁方法,例如中心剪裁、随机
先说中心剪裁,在中心裁剪指定的 PIL Image 或 Tensor其定义如下
```
```python
torchvision.transforms.CenterCrop(size)
```
@@ -113,7 +113,7 @@ torchvision.transforms.CenterCrop(size)
然后是随机剪裁,在一个随机位置剪裁指定的 PIL Image 或 Tensor定义如下
```
```python
torchvision.transforms.RandomCrop(size, padding=None)
```
@@ -121,13 +121,13 @@ torchvision.transforms.RandomCrop(size, padding=None)
最后要说的是 FiveCrop我们将给定的 PIL Image 或 Tensor ,分别从四角和中心进行剪裁,共剪裁成五块,定义如下:
```
```python
torchvision.transforms.FiveCrop(size)
```
size 可以是 int 或 tuple用法同上。掌握了各种剪裁的定义和参数用法以后我们来看一下这些剪裁操作具体如何调用代码如下
```
```python
from PIL import Image
from torchvision import transforms
@@ -158,13 +158,13 @@ for img in imgs:
以概率 p 随机水平翻转图像,定义如下:
```
```python
torchvision.transforms.RandomHorizontalFlip(p=0.5)
```
以概率 p 随机垂直翻转图像,定义如下:
```
```python
torchvision.transforms.RandomVerticalFlip(p=0.5)
```
@@ -172,7 +172,7 @@ torchvision.transforms.RandomVerticalFlip(p=0.5)
这里的随机翻转,是为数据增强提供方便。如果想要必须执行翻转操作的话,将 p 设置为 1 即可。图片翻转代码如下:
```
```python
from PIL import Image
from torchvision import transforms
@@ -212,7 +212,7 @@ display(img2)
torchvision.transforms 提供了对 Tensor 进行标准化的函数,定义如下:
```
```python
torchvision.transforms.Normalize(mean, std, inplace=False)
```
@@ -224,7 +224,7 @@ torchvision.transforms.Normalize(mean, std, inplace=False)
我们来看看以 (R, G, B) 均值和标准差均为 (0.5, 0.5, 0.5) 来标准化图片后,是什么效果:
```
```python
from PIL import Image
from torchvision import transforms
@@ -254,7 +254,7 @@ display(img_norm)
Compose 类是将多个变换组合到一起,它的定义如下:
```
```python
torchvision.transforms.Compose(transforms)
```
@@ -262,7 +262,7 @@ torchvision.transforms.Compose(transforms)
我们还是结合例子动手试试,如果我们想要将图片变为 200*200 像素大小,并且随机裁切成 80 像素的正方形。那么我们可以组合 Resize 和 RandomCrop 变换,具体代码如下所示:
```
```python
from PIL import Image
from IPython.display import display
from torchvision import transforms
@@ -292,7 +292,7 @@ Compose 类是未来我们在实际项目中经常要使用到的类,结合 to
我们还是以读取 MNIST 数据集为例,看下如何在读取数据的同时,完成数据预处理等操作。具体代码如下:
```
```python
from torchvision import transforms
from torchvision import datasets
@@ -320,7 +320,7 @@ print(type(item[0]))
我们下面先来看看,在图像分类实战中使用的 transform可以感受一下实际使用的 transforms 是什么样子:
```
```python
transform = transforms.Compose([
transforms.RandomResizedCrop(dest_image_size),
transforms.RandomHorizontalFlip(),

View File

@@ -48,9 +48,8 @@ BYOL 之后,大家都发现对比学习是靠许许多多的小 trick 和技
下面是这些网络训练结果的对比,也列出了它们分别有哪些 trick用的是分类任务
```
负样本 动量编码器 训练轮数
```
![](https://cdn.xyxsw.site/boxcn3uizAKNhAxQryOwvHxFSDb.png)

View File

@@ -97,7 +97,7 @@ $$
print(similarity_matrix)
```
```
```python
A B C D E
A 1.000000 -0.476731 -0.123091 0.532181 0.969458
B -0.476731 1.000000 0.645497 -0.310087 -0.478091
@@ -124,7 +124,7 @@ $$
print(f'与物品{target_item}最相似的{num}个物品为:{sim_items}')
```
```
```python
与物品E最相似的2个物品为['A', 'D']
```
@@ -147,7 +147,7 @@ $$
print(f'用户{target_user}对物品{target_item}的预测评分为:{target_item_pred}')
```
```
```python
用户 Alice 对物品E的预测评分为4.6
```

View File

@@ -234,7 +234,7 @@ UserCF算法的两个步骤
print(similarity_matrix)
```
```
```python
1 2 3 4 5
1 1.000000 0.852803 0.707107 0.000000 -0.792118
2 0.852803 1.000000 0.467707 0.489956 -0.900149
@@ -253,7 +253,7 @@ UserCF算法的两个步骤
print(f'与用户{target_user}最相似的{num}个用户为:{sim_users}')
```
```
```python
与用户 Alice 最相似的2个用户为['user1', 'user2']
```
@@ -277,7 +277,7 @@ UserCF算法的两个步骤
print(f'用户{target_user}对物品{target_item}的预测评分为:{target_item_pred}')
```
```
```python
用户 Alice 对物品E的预测评分为4.871979899370592
```

View File

@@ -16,7 +16,7 @@
以最基本的 C 语言为例C 语言的函数局部变量就保存在栈中。
```C
```c
#include<stdio.h>
int main()
{
@@ -33,7 +33,7 @@ int main()
可以发现`ch``ch2`刚好差`8`个字节,也就是`ch`的长度。
`ch`只有`8`个字节,那么如果我们向`ch`中写入超过`8`个字节的数据呢?很显然,会从`ch`处发生溢出,写入到`ch2`的空间中,覆盖`ch2`的内容。
```C
```c
#include<stdio.h>
int main()
{
@@ -54,7 +54,7 @@ int main()
对于以上程序,“栈溢出”带来的后果仅仅是修改了局部变量的值,会造成一些程序的逻辑错误:
```C
```c
#include<stdio.h>
int main()
{
@@ -81,7 +81,7 @@ int main()
在 C 语言编译之后,通常会产生汇编语言,汇编语言的字节码可以直接在物理 CPU 上运行。而 C 语言函数调用会被编译为如下形式:
```C
```c
#include<stdio.h>
int add(int a,int b)
{
@@ -187,20 +187,20 @@ ROP 网上已有非常系统的资料,在这里不做过多的叙述,可参
格式化字符串的利用思路来源于`printf`函数中的`%n`format 标签,该标签的作用和`%s``%d`等不同,是将已打印的字符串的长度返回到该标签对应的变量中。在正常情况下的使用不会出现什么问题:
```C
```c
printf("abcd%n",&num);
//输出abcd,并且num的值为4
```
但如果在编写代码时忘记 format 字符串:
```C
```c
printf(something_want_print);
```
此时若攻击者可以自定义该字符串,就可以使用`%d``%p``%s`等打印栈上数据,或者`%n`来覆写栈上的数据,如果覆写了返回地址,就可以实现任意代码执行。
```C
```c
char ch[20];
scanf("%s",ch);// 输入 %d%n%n%n%n%n
printf(ch);

View File

@@ -283,7 +283,7 @@ TLS 建立在 TCP 的基础上,他会通过加密来确保传输过程中数
相信在看这篇文章的大家都正在使用互联网如果你正在使用windows设备你可以先按 `win`+`R` ,输入 `cmd`,在弹出的窗口输入 `ipconfig` 你可以看到里面有一串类似于下文的内容:
```
```powershell
无线局域网适配器 WLAN:
连接特定的 DNS 后缀 . . . . . . . :