diff --git a/docs/draft/Src/CodeandResult/Test_code.py b/docs/draft/Src/CodeandResult/Test_code.py index 14c6a86..3e81702 100644 --- a/docs/draft/Src/CodeandResult/Test_code.py +++ b/docs/draft/Src/CodeandResult/Test_code.py @@ -1,13 +1,14 @@ # 训练+测试 +import os + +import cv2 +import matplotlib.pyplot as plt import torch import torch.nn as nn import torch.utils.data as Data import torchvision -import matplotlib.pyplot as plt -import os -import cv2 torch.manual_seed(1) # 使用随机化种子使神经网络的初始化每次都相同 @@ -19,24 +20,18 @@ # 下载mnist手写数据集 train_data = torchvision.datasets.MNIST( - root='./data/', # 保存或提取的位置 会放在当前文件夹中 + root="./data/", # 保存或提取的位置 会放在当前文件夹中 train=True, # true说明是用于训练的数据,false说明是用于测试的数据 transform=torchvision.transforms.ToTensor(), # 转换PIL.Image or numpy.ndarray - download=DOWNLOAD_MNIST, # 已经下载了就不需要下载了 ) -test_data = torchvision.datasets.MNIST( - root='./data/', - train=False # 表明是测试集 -) +test_data = torchvision.datasets.MNIST(root="./data/", train=False) # 表明是测试集 # 批训练 50个samples, 1 channel,28x28 (50,1,28,28) # Torch中的DataLoader是用来包装数据的工具,它能帮我们有效迭代数据,这样就可以进行批训练 train_loader = Data.DataLoader( - dataset=train_data, - batch_size=BATCH_SIZE, - shuffle=True # 是否打乱数据,一般都打乱 + dataset=train_data, batch_size=BATCH_SIZE, shuffle=True # 是否打乱数据,一般都打乱 ) # 进行测试 @@ -53,6 +48,7 @@ # 卷积(Conv2d)-> 激励函数(ReLU)->池化(MaxPooling)-> # 展平多维的卷积成的特征图->接入全连接层(Linear)->输出 + class CNN(nn.Module): # 我们建立的CNN继承nn.Module这个模块 def __init__(self): super(CNN, self).__init__() @@ -76,11 +72,7 @@ def __init__(self): self.conv2 = nn.Sequential( # 输入图像大小(16,14,14) nn.Conv2d( # 也可以直接简化写成nn.Conv2d(16,32,5,1,2) - in_channels=16, - out_channels=32, - kernel_size=5, - stride=1, - padding=2 + in_channels=16, out_channels=32, kernel_size=5, stride=1, padding=2 ), # 输出图像大小 (32,14,14) nn.ReLU(), @@ -130,13 +122,13 @@ def forward(self, x): # torch.save(cnn.state_dict(), 'cnn2.pkl')#保存模型 # 加载模型,调用时需将前面训练及保存模型的代码注释掉,否则会再训练一遍 -cnn.load_state_dict(torch.load('cnn2.pkl')) +cnn.load_state_dict(torch.load("cnn2.pkl")) cnn.eval() # print 10 predictions from test data inputs = test_x[:32] # 测试32个数据 test_output = cnn(inputs) pred_y = torch.max(test_output, 1)[1].data.numpy() -print(pred_y, 'prediction number') # 打印识别后的数字 +print(pred_y, "prediction number") # 打印识别后的数字 # print(test_y[:10].numpy(), 'real number') img = torchvision.utils.make_grid(inputs) @@ -146,5 +138,5 @@ def forward(self, x): # std = [0.5, 0.5, 0.5] # mean = [0.5, 0.5, 0.5] # img = img * std + mean -cv2.imshow('win', img) # opencv显示需要识别的数据图片 -key_pressed = cv2.waitKey(0) \ No newline at end of file +cv2.imshow("win", img) # opencv显示需要识别的数据图片 +key_pressed = cv2.waitKey(0) diff --git a/docs/draft/Src/CodeandResult/result.md b/docs/draft/Src/CodeandResult/result.md index 8715048..db73918 100644 --- a/docs/draft/Src/CodeandResult/result.md +++ b/docs/draft/Src/CodeandResult/result.md @@ -21,12 +21,12 @@ > root='./data/', # 保存或提取的位置 会放在当前文件夹中 > train=True, # true说明是用于训练的数据,false说明是用于测试的数据 > transform=torchvision.transforms.ToTensor(), # 转换PIL.Image or numpy.ndarray -> +> > download=DOWNLOAD_MNIST, # 已经下载了就不需要下载了 > ) > ``` > -> ``` +> ``` > 11257 stat("./data/MNIST/processed", 0x7ffc239123c0) = -1 ENOENT (No such file or directory) > 11257 stat("./data/MNIST/raw/train-images-idx3-ubyte", {st_mode=S_IFREG|0664, st_size=47040016, ...}) = 0 > 11257 stat("./data/MNIST/raw/train-labels-idx1-ubyte", {st_mode=S_IFREG|0664, st_size=60008, ...}) = 0 @@ -262,7 +262,7 @@ > > > ->``` +>``` >11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 4 >11257 getsockname(5, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0 >11257 getpeername(5, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected) @@ -318,7 +318,7 @@ >for step, (b_x, b_y) in enumerate(train_loader): >``` > -> +> > >``` >11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 5 @@ -351,7 +351,7 @@ > output = cnn(b_x) > ``` > -> +> > > ``` > 11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 4 @@ -505,7 +505,7 @@ > 11257 futex(0x5580907ffdb4, FUTEX_WAKE_PRIVATE, 2147483647) = 0 > ``` > -> +> @@ -517,9 +517,9 @@ > loss = loss_func(output, b_y) > ``` > -> > -> ``` +> +> ``` > 11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 5 > 11257 getsockname(4, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0 > 11257 getpeername(4, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected) @@ -536,9 +536,9 @@ > optimizer.zero_grad() > ``` > -> > -> ``` +> +> ``` > 11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 4 > 11257 getsockname(5, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0 > 11257 getpeername(5, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected) @@ -555,7 +555,7 @@ > loss.backward() > ``` > -> +> > > ``` > 11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP @@ -683,9 +683,9 @@ > optimizer.step() > ``` > -> > -> ``` +> +> ``` > 11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 4 > 11257 getsockname(5, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0 > 11257 getpeername(5, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected) @@ -711,9 +711,9 @@ > torch.save(cnn.state_dict(), 'cnn2.pkl') > ``` > -> > -> ``` +> +> ``` > 11257 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 5 > 11257 getsockname(4, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, [16]) = 0 > 11257 getpeername(4, 0x7ffc23912670, [16]) = -1 ENOTCONN (Transport endpoint is not connected) @@ -732,7 +732,7 @@ #### 16. python函数结束后的部分 > ``` -> +> > 11293 futex(0x5580904cd034, FUTEX_WAIT_PRIVATE, 328, NULL > 11257 <... write resumed>) = 767 > 11257 close(4) = 0 @@ -789,4 +789,4 @@ > 11257 +++ exited with 0 +++ > ``` > -> +> diff --git a/docs/draft/lab report.md b/docs/draft/lab report.md index a109849..ccbdf01 100644 --- a/docs/draft/lab report.md +++ b/docs/draft/lab report.md @@ -1,5 +1,5 @@ # 基于机器学习的mnist实验的文件数据流使用监控实验报告 - + ## 机器学习的基于mnist数据集的torch实验分析,在实验过程中使用数据、产生中间结果、生成和保存最终模型三个工程中对数据的工作流 下面根据实验代码,按照对mnist数据下载、处理,神经网络的定义、训练、保存、加载并验证的流程对数据流进行分析。 @@ -25,7 +25,7 @@ 这段代码使用了PyTorch中的torchvision.datasets.MNIST类来加载MNIST手写数字数据集对数据进行的处理: 1. `root='./data/'`: 指定了数据集保存或提取的位置,这里设置为'./data/',表示数据集将保存在当前文件夹中。 -2. 用train=?参数将数据分为mnist的训练集和测试集。 +2. 用train=?参数将数据分为mnist的训练集和测试集。 3. `transform=torchvision.transforms.ToTensor()`: 将图像数据转换为Tensor格式。`ToTensor()`是一个变换函数,它将PIL.Image格式或NumPy数组格式的图像转换为Tensor格式。 4. `download=DOWNLOAD_MNIST`: 判断是否需要下载数据集。 @@ -54,7 +54,7 @@ test_y = test_data.test_labels[:2000] - `dataset=train_data`:指定了数据集,即之前加载的训练数据集`train_data`。 - `batch_size=BATCH_SIZE`:指定了每个批次的样本数量。 - `shuffle=True`:对数据进行打乱以增加随机性。 -2. `test_x = torch.unsqueeze(test_data.train_data, dim=1).type(torch.FloatTensor)[:2000] / 255`: +2. `test_x = torch.unsqueeze(test_data.train_data, dim=1).type(torch.FloatTensor)[:2000] / 255`: - `torch.unsqueeze(test_data.train_data, dim=1)`: 使用`torch.unsqueeze()`函数将原本的测试数据的维度从(2000, 28, 28)扩展为(2000, 1, 28, 28)。这个操作在维度1上增加了一个维度,用于表示通道数。 - `.type(torch.FloatTensor)`: 将数据类型转换为`torch.FloatTensor`,即浮点型。 - `[:2000]`: 截取前2000个样本。 @@ -267,4 +267,3 @@ def read_sn3_pascalvincent_tensor(path: str, strict: bool = True) -> torch.Tenso ## 梳理并画出实验中Trace points 和 Kprobes 、Kretprobes串连起来的流程图 ![流程图](Src/Imgs/ProcessionandHooks.png) -