当前位置: 首页 > news >正文

高端网站制作费用syntaxhighlighter wordpress使用

高端网站制作费用,syntaxhighlighter wordpress使用,做编程的 网站有哪些内容,互联网建站网站本文为#x1f517;小白入门Pytorch内部限免文章 #x1f368; 本文为#x1f517;小白入门Pytorch中的学习记录博客#x1f366; 参考文章#xff1a;【小白入门Pytorch】乳腺癌识别#x1f356; 原作者#xff1a;K同学啊 在本案例中#xff0c;我将带大家探索一下深…本文为小白入门Pytorch内部限免文章 本文为小白入门Pytorch中的学习记录博客 参考文章【小白入门Pytorch】乳腺癌识别 原作者K同学啊 在本案例中我将带大家探索一下深度学习在医学领域的应用–完成乳腺癌识别乳腺癌是女性最常见的癌症形式浸润性导管癌 (IDC) 是最常见的乳腺癌形式。准确识别和分类乳腺癌亚型是一项重要的临床任务利用深度学习方法识别可以有效节省时间并减少错误。 我们的数据集是由多张以 40 倍扫描的乳腺癌 (BCa) 标本的完整载玻片图像组成。 关于环境配置请看我之前缩写博客https://blog.csdn.net/qq_33489955/article/details/132890434?spm1001.2014.3001.5501 数据集链接https://pan.baidu.com/s/1xkqsqsRRwlBOl5L9t_U0UA?pwdvgqn 提取码vgqn –来自百度网盘超级会员V4的分享 目录 一、 前期准备1. 设置GPU2. 导入数据3. 划分数据集 二、手动搭建VGG-16模型1. 搭建模型 2. 查看模型详情 三、 训练模型1. 编写训练函数3. 编写测试函数3. 正式训练 四、 结果可视化1. Loss与Accuracy图2. 指定图片进行预测3. 模型评估 一、 前期准备 import torchprint(torch.__version__) # 查看pytorch版本2.0.1cu118​ 1. 设置GPU 如果设备上支持GPU就使用GPU,否则使用CPU import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision from torchvision import transforms, datasets import os,PIL,pathlib,warningswarnings.filterwarnings(ignore) #忽略警告信息device torch.device(cuda if torch.cuda.is_available() else cpu) devicedevice(typecuda)2. 导入数据 import os,PIL,random,pathlibdata_dir ./data/2-data/ data_dir pathlib.Path(data_dir)提问已经有路径不是直接使用就可以了吗为什么还要将其转化为路径对象。 回答当我们使用传统的字符串来表示文件路径时确实可以工作但pathlib提供的对象方法对于文件路径的操作更为简洁和直观。 以下是使用pathlib的一些优点 跨平台兼容性pathlib自动处理不同操作系统的路径分隔符问题。例如Windows使用\而Unix和Mac使用/。使用pathlib你不需要关心这些细节。链式操作你可以方便地使用链式方法来处理路径。例如path.parent返回父目录path.stem返回文件的基本名称不带扩展名等。读写简便pathlib.Path对象有read_text(), write_text(), read_bytes(), 和write_bytes()等方法可以直接读写文件而无需再使用open函数。创建和删除目录使用pathlib, 你可以很容易地创建 (mkdir()) 或删除 (rmdir()) 目录。 以下是一个简单的例子来比较两者 使用传统的os模块 import os file_path os.path.join(folder1, folder2, myfile.txt) 使用pathlib from pathlib import Path file_path Path(folder1) / folder2 / myfile.txt 所以虽然直接使用字符串路径是可以的但使用pathlib可以使代码更加简洁、可读和跨平台兼容。 # 关于transforms.Compose的更多介绍可以参考https://blog.csdn.net/qq_38251616/article/details/124878863 train_transforms transforms.Compose([transforms.Resize([224, 224]), # 将输入图片resize成统一尺寸transforms.ToTensor(), # 将PIL Image或numpy.ndarray转换为tensor并归一化到[0,1]之间transforms.Normalize( # 标准化处理--转换为标准正太分布高斯分布使模型更容易收敛mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) # 其中 mean[0.485,0.456,0.406]与std[0.229,0.224,0.225] 从数据集中随机抽样计算得到的。 ])test_transforms transforms.Compose([transforms.Resize([224, 224]), # 将输入图片resize成统一尺寸transforms.ToTensor(), # 将PIL Image或numpy.ndarray转换为tensor并归一化到[0,1]之间transforms.Normalize( # 标准化处理--转换为标准正太分布高斯分布使模型更容易收敛mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) # 其中 mean[0.485,0.456,0.406]与std[0.229,0.224,0.225] 从数据集中随机抽样计算得到的。 ])total_data datasets.ImageFolder(data_dir, transformtrain_transforms) total_dataDataset ImageFolderNumber of datapoints: 13403Root location: data\2-dataStandardTransform Transform: Compose(Resize(size[224, 224], interpolationbilinear, max_sizeNone, antialiaswarn)ToTensor()Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]))total_data.class_to_idx{0: 0, 1: 1}3. 划分数据集 train_size int(0.8 * len(total_data)) test_size len(total_data) - train_size train_dataset, test_dataset torch.utils.data.random_split(total_data, [train_size, test_size]) train_dataset, test_dataset(torch.utils.data.dataset.Subset at 0x14191aec850,torch.utils.data.dataset.Subset at 0x141c3e693d0)batch_size 32train_dl torch.utils.data.DataLoader(train_dataset,batch_sizebatch_size,shuffleTrue,num_workers8) test_dl torch.utils.data.DataLoader(test_dataset,batch_sizebatch_size,shuffleTrue,num_workers8)for X, y in test_dl:print(Shape of X [N, C, H, W]: , X.shape)print(Shape of y: , y.shape, y.dtype)breakShape of X [N, C, H, W]: torch.Size([32, 3, 224, 224]) Shape of y: torch.Size([32]) torch.int64提问为什么结果只输出一次是因为测试数据集只有一个批次即32张图片吗 回答不结果只输出一次是因为您的代码中包含了一个 break 语句。这个 break 会在第一次迭代后立即退出 for 循环因此您只看到了第一个批次的输出。 如果您想确认 test_dl 中有多少批次您可以尝试以下代码 num_batches len(test_dl) print(Number of batches in test_dl:, num_batches) 这将告诉您 test_dl 中有多少个批次。如果这个数字是1那么确实只有32张图片。但是如果这个数字大于1那么 test_dl 会包含更多的图片。每个批次都有32张图片除了可能的最后一个批次它可能包含少于32张图片取决于数据集的总数。 二、手动搭建VGG-16模型 VGG-16结构说明 13个卷积层Convolutional Layer分别用blockX_convX表示;3个全连接层Fully connected Layer用classifier表示;5个池化层Pool layer。 VGG-16包含了16个隐藏层13个卷积层和3个全连接层故称为VGG-16 1. 搭建模型 import torch.nn.functional as Fclass vgg16(nn.Module):def __init__(self):super(vgg16, self).__init__()# 卷积块1self.block1 nn.Sequential( # # 这定义了一个名为block1的属性。nn.Sequential是一个容器它按照它们被添加到容器中的顺序执行其中的层或操作。nn.Conv2d(3, 64, kernel_size(3, 3), stride(1, 1), padding(1, 1)), # 这添加了一个2D卷积层。它接受3个通道的输入例如RGB图像并产生64个通道的输出。它使用3x3的卷积核步长为1和1的填充。nn.ReLU(), # 这添加了一个ReLU激活函数。它将所有的负值变为0其他值保持不变。nn.Conv2d(64, 64, kernel_size(3, 3), stride(1, 1), padding(1, 1)), # 这是另一个2D卷积层。它接受上一个卷积层的64个通道的输出并产生64个通道的输出。nn.ReLU(),nn.MaxPool2d(kernel_size(2, 2), stride(2, 2)) # # 这添加了一个2D最大池化层。它使用2x2的窗口和2的步长来减少每个通道的尺寸的一半。)# 卷积块2self.block2 nn.Sequential(nn.Conv2d(64, 128, kernel_size(3, 3), stride(1, 1), padding(1, 1)),nn.ReLU(),nn.Conv2d(128, 128, kernel_size(3, 3), stride(1, 1), padding(1, 1)),nn.ReLU(),nn.MaxPool2d(kernel_size(2, 2), stride(2, 2)))# 卷积块3self.block3 nn.Sequential(nn.Conv2d(128, 256, kernel_size(3, 3), stride(1, 1), padding(1, 1)),nn.ReLU(),nn.Conv2d(256, 256, kernel_size(3, 3), stride(1, 1), padding(1, 1)),nn.ReLU(),nn.Conv2d(256, 256, kernel_size(3, 3), stride(1, 1), padding(1, 1)),nn.ReLU(),nn.MaxPool2d(kernel_size(2, 2), stride(2, 2)))# 卷积块4self.block4 nn.Sequential(nn.Conv2d(256, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1)),nn.ReLU(),nn.Conv2d(512, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1)),nn.ReLU(),nn.Conv2d(512, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1)),nn.ReLU(),nn.MaxPool2d(kernel_size(2, 2), stride(2, 2)))# 卷积块5self.block5 nn.Sequential(nn.Conv2d(512, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1)),nn.ReLU(),nn.Conv2d(512, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1)),nn.ReLU(),nn.Conv2d(512, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1)),nn.ReLU(),nn.MaxPool2d(kernel_size(2, 2), stride(2, 2)))# 全连接网络层用于分类self.classifier nn.Sequential(nn.Linear(in_features512*7*7, out_features4096),nn.ReLU(),nn.Linear(in_features4096, out_features4096),nn.ReLU(),nn.Linear(in_features4096, out_features2))def forward(self, x):x self.block1(x)x self.block2(x)x self.block3(x)x self.block4(x)x self.block5(x)x torch.flatten(x, start_dim1)x self.classifier(x)return xdevice cuda if torch.cuda.is_available() else cpu print(Using {} device.format(device))model vgg16().to(device) modelUsing cuda device​ vgg16((block1): Sequential((0): Conv2d(3, 64, kernel_size(3, 3), stride(1, 1), padding(1, 1))(1): ReLU()(2): Conv2d(64, 64, kernel_size(3, 3), stride(1, 1), padding(1, 1))(3): ReLU()(4): MaxPool2d(kernel_size(2, 2), stride(2, 2), padding0, dilation1, ceil_modeFalse))(block2): Sequential((0): Conv2d(64, 128, kernel_size(3, 3), stride(1, 1), padding(1, 1))(1): ReLU()(2): Conv2d(128, 128, kernel_size(3, 3), stride(1, 1), padding(1, 1))(3): ReLU()(4): MaxPool2d(kernel_size(2, 2), stride(2, 2), padding0, dilation1, ceil_modeFalse))(block3): Sequential((0): Conv2d(128, 256, kernel_size(3, 3), stride(1, 1), padding(1, 1))(1): ReLU()(2): Conv2d(256, 256, kernel_size(3, 3), stride(1, 1), padding(1, 1))(3): ReLU()(4): Conv2d(256, 256, kernel_size(3, 3), stride(1, 1), padding(1, 1))(5): ReLU()(6): MaxPool2d(kernel_size(2, 2), stride(2, 2), padding0, dilation1, ceil_modeFalse))(block4): Sequential((0): Conv2d(256, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1))(1): ReLU()(2): Conv2d(512, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1))(3): ReLU()(4): Conv2d(512, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1))(5): ReLU()(6): MaxPool2d(kernel_size(2, 2), stride(2, 2), padding0, dilation1, ceil_modeFalse))(block5): Sequential((0): Conv2d(512, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1))(1): ReLU()(2): Conv2d(512, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1))(3): ReLU()(4): Conv2d(512, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1))(5): ReLU()(6): MaxPool2d(kernel_size(2, 2), stride(2, 2), padding0, dilation1, ceil_modeFalse))(classifier): Sequential((0): Linear(in_features25088, out_features4096, biasTrue)(1): ReLU()(2): Linear(in_features4096, out_features4096, biasTrue)(3): ReLU()(4): Linear(in_features4096, out_features2, biasTrue)) )2. 查看模型详情 !pip install torchsummaryDefaulting to user installation because normal site-packages is not writeable Requirement already satisfied: torchsummary in c:\users\cheng\appdata\roaming\python\python310\site-packages (1.5.1)# 统计模型参数量以及其他指标 import torchsummary as summary summary.summary(model, (3, 224, 224))----------------------------------------------------------------Layer (type) Output Shape Param # Conv2d-1 [-1, 64, 224, 224] 1,792ReLU-2 [-1, 64, 224, 224] 0Conv2d-3 [-1, 64, 224, 224] 36,928ReLU-4 [-1, 64, 224, 224] 0MaxPool2d-5 [-1, 64, 112, 112] 0Conv2d-6 [-1, 128, 112, 112] 73,856ReLU-7 [-1, 128, 112, 112] 0Conv2d-8 [-1, 128, 112, 112] 147,584ReLU-9 [-1, 128, 112, 112] 0MaxPool2d-10 [-1, 128, 56, 56] 0Conv2d-11 [-1, 256, 56, 56] 295,168ReLU-12 [-1, 256, 56, 56] 0Conv2d-13 [-1, 256, 56, 56] 590,080ReLU-14 [-1, 256, 56, 56] 0Conv2d-15 [-1, 256, 56, 56] 590,080ReLU-16 [-1, 256, 56, 56] 0MaxPool2d-17 [-1, 256, 28, 28] 0Conv2d-18 [-1, 512, 28, 28] 1,180,160ReLU-19 [-1, 512, 28, 28] 0Conv2d-20 [-1, 512, 28, 28] 2,359,808ReLU-21 [-1, 512, 28, 28] 0Conv2d-22 [-1, 512, 28, 28] 2,359,808ReLU-23 [-1, 512, 28, 28] 0MaxPool2d-24 [-1, 512, 14, 14] 0Conv2d-25 [-1, 512, 14, 14] 2,359,808ReLU-26 [-1, 512, 14, 14] 0Conv2d-27 [-1, 512, 14, 14] 2,359,808ReLU-28 [-1, 512, 14, 14] 0Conv2d-29 [-1, 512, 14, 14] 2,359,808ReLU-30 [-1, 512, 14, 14] 0MaxPool2d-31 [-1, 512, 7, 7] 0Linear-32 [-1, 4096] 102,764,544ReLU-33 [-1, 4096] 0Linear-34 [-1, 4096] 16,781,312ReLU-35 [-1, 4096] 0Linear-36 [-1, 2] 8,194Total params: 134,268,738 Trainable params: 134,268,738 Non-trainable params: 0 ---------------------------------------------------------------- Input size (MB): 0.57 Forward/backward pass size (MB): 218.52 Params size (MB): 512.19 Estimated Total Size (MB): 731.29 ----------------------------------------------------------------三、 训练模型 1. 编写训练函数 # 训练循环 def train(dataloader, model, loss_fn, optimizer):size len(dataloader.dataset) # 训练集的大小num_batches len(dataloader) # 批次数目, (size/batch_size向上取整)train_loss, train_acc 0, 0 # 初始化训练损失和正确率for X, y in dataloader: # 获取图片及其标签X, y X.to(device), y.to(device)# 计算预测误差pred model(X) # 网络输出loss loss_fn(pred, y) # 计算网络输出和真实值之间的差距targets为真实值计算二者差值即为损失# 反向传播optimizer.zero_grad() # grad属性归零loss.backward() # 反向传播optimizer.step() # 每一步自动更新# 记录acc与losstrain_acc (pred.argmax(1) y).type(torch.float).sum().item()train_loss loss.item()train_acc / sizetrain_loss / num_batchesreturn train_acc, train_loss3. 编写测试函数 测试函数和训练函数大致相同但是由于不进行梯度下降对网络权重进行更新所以不需要传入优化器 def test (dataloader, model, loss_fn):size len(dataloader.dataset) # 测试集的大小num_batches len(dataloader) # 批次数目, (size/batch_size向上取整)test_loss, test_acc 0, 0# 当不进行训练时停止梯度更新节省计算内存消耗with torch.no_grad():for imgs, target in dataloader:imgs, target imgs.to(device), target.to(device)# 计算losstarget_pred model(imgs)loss loss_fn(target_pred, target)test_loss loss.item()test_acc (target_pred.argmax(1) target).type(torch.float).sum().item()test_acc / sizetest_loss / num_batchesreturn test_acc, test_loss3. 正式训练 1. model.train() model.train()的作用是启用 Batch Normalization 和 Dropout。 如果模型中有BN层(Batch Normalization和Dropout需要在训练时添加model.train()。model.train()是保证BN层能够用到每一批数据的均值和方差。对于Dropoutmodel.train()是随机取一部分网络连接来训练更新参数。 2. model.eval() model.eval()的作用是不启用 Batch Normalization 和 Dropout。 如果模型中有BN层(Batch Normalization和Dropout在测试时添加model.eval()。model.eval()是保证BN层能够用全部训练数据的均值和方差即测试过程中要保证BN层的均值和方差不变。对于Dropoutmodel.eval()是利用到了所有网络连接即不进行随机舍弃神经元。 训练完train样本后生成的模型model要用来测试样本。在model(test)之前需要加上model.eval()否则的话有输入数据即使不训练它也会改变权值。这是model中含有BN层和Dropout所带来的的性质。 import copyoptimizer torch.optim.Adam(model.parameters(), lr 1e-4) loss_fn nn.CrossEntropyLoss() # 创建损失函数epochs 10train_loss [] train_acc [] test_loss [] test_acc []best_acc 0 # 设置一个最佳准确率作为最佳模型的判别指标for epoch in range(epochs):model.train()epoch_train_acc, epoch_train_loss train(train_dl, model, loss_fn, optimizer)model.eval()epoch_test_acc, epoch_test_loss test(test_dl, model, loss_fn)# 保存最佳模型到 best_modelif epoch_test_acc best_acc:best_acc epoch_test_accbest_model copy.deepcopy(model)train_acc.append(epoch_train_acc)train_loss.append(epoch_train_loss)test_acc.append(epoch_test_acc)test_loss.append(epoch_test_loss)# 获取当前的学习率lr optimizer.state_dict()[param_groups][0][lr]template (Epoch:{:2d}, Train_acc:{:.1f}%, Train_loss:{:.3f}, Test_acc:{:.1f}%, Test_loss:{:.3f}, Lr:{:.2E})print(template.format(epoch1, epoch_train_acc*100, epoch_train_loss, epoch_test_acc*100, epoch_test_loss, lr))# 保存最佳模型到文件中 PATH ./best_model.pth # 保存的参数文件名 torch.save(model.state_dict(), PATH)print(Done)Epoch: 1, Train_acc:76.6%, Train_loss:0.487, Test_acc:82.7%, Test_loss:0.385, Lr:1.00E-04 Epoch: 2, Train_acc:84.9%, Train_loss:0.364, Test_acc:79.9%, Test_loss:0.442, Lr:1.00E-04 Epoch: 3, Train_acc:84.0%, Train_loss:0.376, Test_acc:84.3%, Test_loss:0.349, Lr:1.00E-04 Epoch: 4, Train_acc:85.7%, Train_loss:0.339, Test_acc:86.1%, Test_loss:0.319, Lr:1.00E-04 Epoch: 5, Train_acc:86.3%, Train_loss:0.329, Test_acc:85.5%, Test_loss:0.331, Lr:1.00E-04 Epoch: 6, Train_acc:86.3%, Train_loss:0.324, Test_acc:86.2%, Test_loss:0.315, Lr:1.00E-04 Epoch: 7, Train_acc:86.8%, Train_loss:0.313, Test_acc:87.8%, Test_loss:0.298, Lr:1.00E-04 Epoch: 8, Train_acc:87.3%, Train_loss:0.302, Test_acc:86.3%, Test_loss:0.325, Lr:1.00E-04 Epoch: 9, Train_acc:87.7%, Train_loss:0.297, Test_acc:84.7%, Test_loss:0.363, Lr:1.00E-04 Epoch:10, Train_acc:88.5%, Train_loss:0.282, Test_acc:87.7%, Test_loss:0.295, Lr:1.00E-04 Done四、 结果可视化 1. Loss与Accuracy图 import matplotlib.pyplot as plt #隐藏警告 import warnings warnings.filterwarnings(ignore) #忽略警告信息 plt.rcParams[figure.dpi] 100 #分辨率epochs_range range(epochs)plt.figure(figsize(12, 3)) plt.subplot(1, 2, 1)plt.plot(epochs_range, train_acc, labelTraining Accuracy) plt.plot(epochs_range, test_acc, labelTest Accuracy) plt.legend(loclower right) plt.title(Training and Validation Accuracy)plt.subplot(1, 2, 2) plt.plot(epochs_range, train_loss, labelTraining Loss) plt.plot(epochs_range, test_loss, labelTest Loss) plt.legend(locupper right) plt.title(Training and Validation Loss) plt.show()​ 2. 指定图片进行预测 from PIL import Image classes [正常细胞, 乳腺癌细胞]def predict_one_image(image_path, model, transform, classes):test_img Image.open(image_path).convert(RGB)plt.imshow(test_img) # 展示预测的图片test_img transform(test_img)img test_img.to(device).unsqueeze(0)model.eval()output model(img)_,pred torch.max(output,1)pred_class classes[pred]print(f预测结果是{pred_class})# 预测训练集中的某张照片 predict_one_image(image_path./data/2-data/0/8863_idx5_x451_y501_class0.png, modelmodel, transformtrain_transforms, classesclasses)预测结果是正常细胞​ 3. 模型评估 best_model.eval() epoch_test_acc, epoch_test_loss test(test_dl, best_model, loss_fn)epoch_test_acc, epoch_test_loss(0.8780305856023871, 0.29799242158021244)# 查看是否与我们记录的最高准确率一致 epoch_test_acc0.8780305856023871
http://www.tj-hxxt.cn/news/137352.html

相关文章:

  • 四川省建设厅的注册中心网站首页网站快照明天更新是什么情况
  • 普陀网站制作网络推广平台几大类
  • 手机网站如何做郑州一建集团工程建设有限公司网站
  • 建网站基础需要学什么亳州电商网站建设
  • 网站假设教程软件下载网站开发
  • 江门市网站开发怎么注销自己名下的公司
  • 网站建设排名北京网络推广合作方式
  • 正定县住房和城乡建设局网站网站建设是指
  • 南京高端网站建设公司仿站是什么
  • 湛江模板建站系统淘宝上面如何做网站
  • 怎样增加网站的权重网站备案个人和企业的区别
  • 做网站后期自己可以维护吗百度app安装下载
  • 洛阳市建设工程评标专家网站孝感高新区建设局网站
  • 佛山网站建设联系手机号码定位网站开发
  • 南京做网站的客户电话广州网站建设培训
  • 自己有服务器怎么做网站横岗做网站
  • 米趋外贸网站建设手机网站建设ppt
  • 服装网站建设课程新手如何做服装网站
  • 小内存安装wordpress保定百度seo排名
  • 华为免费企业网站建设毕设帮做网站
  • 备案时网站关闭广东电子商务网站
  • 嘉兴网站定制做的比较好的公司网站
  • ppt做书模板下载网站有哪些沈阳网站制作系统
  • wordpress 制作网站模板wordpress企业仿站视频教程
  • 无锡企业网站建设报价陈田拆车件网上商城
  • 租门面做网站如何搭建网站教程
  • 湛江网站建设的软件如何设置网站的默认页
  • qq 互联网站开发代码吃什么补肾最快最好
  • 长沙官网seo技术厂家seo网络培训学校
  • 查询域名的网站做网站销售会问哪些问题