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

sina app engine wordpressaso优化分析

sina app engine wordpress,aso优化分析,小制作 手工 简单,网站开发asp 视频目录 一、TensorBoard简介 1.1 发展历程 1.2 核心原理 二、TensorBoard的基本操作 2.1 安装与启动 2.2 日志目录管理 2.3 记录标量数据 2.4 可视化模型结构 2.5 可视化图像数据 2.6 记录权重和梯度直方图 三、TensorBoard实战案例 3.1 CIFAR-10 MLP实战 数据预处理…

目录

一、TensorBoard简介

1.1 发展历程

1.2 核心原理

二、TensorBoard的基本操作

2.1 安装与启动

2.2 日志目录管理

2.3 记录标量数据

2.4 可视化模型结构

2.5 可视化图像数据

2.6 记录权重和梯度直方图

三、TensorBoard实战案例

3.1 CIFAR-10 MLP实战

数据预处理与加载

定义MLP模型

训练与TensorBoard记录

3.2 CIFAR-10 CNN实战

数据预处理与加载

定义CNN模型

训练与TensorBoard记录

四、TensorBoard的可视化结果


一、TensorBoard简介

1.1 发展历程

TensorBoard是TensorFlow生态中的官方可视化工具,同时也支持PyTorch等其他深度学习框架。它最初于2015年随TensorFlow框架一起发布,旨在满足深度学习研究者对复杂模型训练过程的可视化需求。此后,TensorBoard不断更新和完善,新增了图像/音频可视化、直方图、多运行对比等功能,并在2019年后与PyTorch实现了兼容。如今,TensorBoard已经成为深度学习领域不可或缺的可视化工具之一。

1.2 核心原理

TensorBoard的核心原理非常简单:在训练过程中,将训练数据(如损失值、准确率、权重分布等)写入日志文件(.tfevents文件),然后通过启动本地网页服务读取日志文件并将其可视化为图表、图像等形式。这种方式不仅避免了手动打印数据和绘制图表的繁琐过程,还能实时监控训练过程中的数据变化,方便我们根据可视化结果动态调整训练策略。

二、TensorBoard的基本操作

2.1 安装与启动

在使用TensorBoard之前,我们需要先安装它。通过以下命令可以快速完成安装:

pip install tensorboard -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完成后,我们可以在项目根目录下运行以下命令启动TensorBoard服务:

tensorboard --logdir=runs

其中,--logdir参数指定了日志文件的存储目录。启动服务后,TensorBoard会生成一个本地访问链接(通常是http://localhost:6006),我们可以通过浏览器访问该链接查看可视化结果。

2.2 日志目录管理

为了避免日志文件的重复覆盖,TensorBoard提供了自动管理日志目录的功能。在代码中,我们可以通过以下方式创建独立的日志目录:

log_dir = 'runs/cifar10_mlp_experiment'
if os.path.exists(log_dir):i = 1while os.path.exists(f"{log_dir}_{i}"):i += 1log_dir = f"{log_dir}_{i}"
writer = SummaryWriter(log_dir)

这样,每次运行代码时都会生成一个新的日志目录,方便我们对比不同训练任务的结果。

2.3 记录标量数据

标量数据(如损失值、准确率、学习率等)是训练过程中最常用的数据类型。我们可以通过add_scalar方法将标量数据写入日志文件:

writer.add_scalar('Train/Batch_Loss', batch_loss, global_step)
writer.add_scalar('Train/Batch_Accuracy', batch_acc, global_step)

在TensorBoard的SCALARS选项卡中,我们可以查看这些标量数据的变化曲线,并支持多运行对比。

2.4 可视化模型结构

TensorBoard还支持可视化模型结构,这有助于我们直观地了解模型的层次结构和数据流向。我们可以通过以下代码将模型结构写入日志文件:

dataiter = iter(train_loader)
images, labels = next(dataiter)
images = images.to(device)
writer.add_graph(model, images)

在TensorBoard的GRAPHS选项卡中,我们可以查看模型的计算图结构。

2.5 可视化图像数据

对于图像数据,TensorBoard提供了强大的可视化功能。我们可以将训练图像、错误预测样本等可视化为图像网格:

img_grid = torchvision.utils.make_grid(images[:8].cpu())
writer.add_image('原始训练图像', img_grid)

在TensorBoard的IMAGES选项卡中,我们可以查看这些图像数据。

2.6 记录权重和梯度直方图

为了监控模型参数的变化,我们可以记录权重和梯度的分布直方图:

for name, param in model.named_parameters():writer.add_histogram(f'weights/{name}', param, global_step)if param.grad is not None:writer.add_histogram(f'grads/{name}', param.grad, global_step)

在TensorBoard的HISTOGRAMS选项卡中,我们可以查看权重和梯度的分布变化,从而诊断训练过程中的问题(如梯度消失或爆炸)。

三、TensorBoard实战案例

3.1 CIFAR-10 MLP实战

为了展示TensorBoard的实际应用,我们以CIFAR-10数据集为例,训练一个多层感知机(MLP)模型,并通过TensorBoard记录训练过程中的各种信息。

数据预处理与加载
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])train_dataset = datasets.CIFAR10(root='./data',train=True,download=True,transform=transform
)test_dataset = datasets.CIFAR10(root='./data',train=False,transform=transform
)train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)
定义MLP模型
class MLP(nn.Module):def __init__(self):super(MLP, self).__init__()self.flatten = nn.Flatten()self.layer1 = nn.Linear(3072, 512)self.relu1 = nn.ReLU()self.dropout1 = nn.Dropout(0.2)self.layer2 = nn.Linear(512, 256)self.relu2 = nn.ReLU()self.dropout2 = nn.Dropout(0.2)self.layer3 = nn.Linear(256, 10)def forward(self, x):x = self.flatten(x)x = self.layer1(x)x = self.relu1(x)x = self.dropout1(x)x = self.layer2(x)x = self.relu2(x)x = self.dropout2(x)x = self.layer3(x)return x
训练与TensorBoard记录
def train(model, train_loader, test_loader, criterion, optimizer, device, epochs, writer):model.train()global_step = 0dataiter = iter(train_loader)images, labels = next(dataiter)images = images.to(device)writer.add_graph(model, images)img_grid = torchvision.utils.make_grid(images[:8].cpu())writer.add_image('原始训练图像', img_grid, global_step=0)for epoch in range(epochs):running_loss = 0.0correct = 0total = 0for batch_idx, (data, target) in enumerate(train_loader):data, target = data.to(device), target.to(device)optimizer.zero_grad()output = model(data)loss = criterion(output, target)loss.backward()optimizer.step()running_loss += loss.item()_, predicted = output.max(1)total += target.size(0)correct += predicted.eq(target).sum().item()batch_acc = 100. * correct / totalwriter.add_scalar('Train/Batch Loss', loss.item(), global_step)writer.add_scalar('Train/Batch Accuracy', batch_acc, global_step)writer.add_scalar('Train/Learning Rate', optimizer.param_groups[0]['lr'], global_step)if (batch_idx + 1) % 200 == 0:for name, param in model.named_parameters():writer.add_histogram(f'Weights/{name}', param, global_step)if param.grad is not None:writer.add_histogram(f'Gradients/{name}', param.grad, global_step)global_step += 1epoch_train_loss = running_loss / len(train_loader)epoch_train_acc = 100. * correct / totalwriter.add_scalar('Train/Epoch Loss', epoch_train_loss, epoch)writer.add_scalar('Train/Epoch Accuracy', epoch_train_acc, epoch)model.eval()test_loss = 0correct_test = 0total_test = 0wrong_images = []wrong_labels = []wrong_preds = []with torch.no_grad():for data, target in test_loader:data, target = data.to(device), target.to(device)output = model(data)test_loss += criterion(output, target).item()_, predicted = output.max(1)total_test += target.size(0)correct_test += predicted.eq(target).sum().item()wrong_mask = (predicted != target)if wrong_mask.sum() > 0:wrong_batch_images = data[wrong_mask][:8].cpu()wrong_batch_labels = target[wrong_mask][:8].cpu()wrong_batch_preds = predicted[wrong_mask][:8].cpu()wrong_images.extend(wrong_batch_images)wrong_labels.extend(wrong_batch_labels)wrong_preds.extend(wrong_batch_preds)epoch_test_loss = test_loss / len(test_loader)epoch_test_acc = 100. * correct_test / total_testwriter.add_scalar('Test/Epoch Loss', epoch_test_loss, epoch)writer.add_scalar('Test/Epoch Accuracy', epoch_test_acc, epoch)if wrong_images:wrong_img_grid = torchvision.utils.make_grid(wrong_images)writer.add_image('错误预测样本', wrong_img_grid, epoch)wrong_text = [f"真实: {classes[wl]}, 预测: {classes[wp]}" for wl, wp in zip(wrong_labels, wrong_preds)]writer.add_text('错误预测标签', '\n'.join(wrong_text), epoch)print(f'Epoch {epoch+1}/{epochs} 完成 | 测试准确率: {epoch_test_acc:.2f}%')writer.close()return epoch_test_acc

3.2 CIFAR-10 CNN实战

除了MLP模型,我们还可以使用卷积神经网络(CNN)来训练CIFAR-10数据集,并通过TensorBoard记录训练过程中的信息。CNN模型的定义和训练过程与MLP类似,只是模型结构和数据预处理略有不同。

数据预处理与加载
train_transform = transforms.Compose([transforms.RandomCrop(32, padding=4),transforms.RandomHorizontalFlip(),transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1),transforms.RandomRotation(15),transforms.ToTensor(),transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))
])test_transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))
])train_dataset = datasets.CIFAR10(root='./data',train=True,download=True,transform=train_transform
)test_dataset = datasets.CIFAR10(root='./data',train=False,transform=test_transform
)train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)
定义CNN模型
class CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.conv1 = nn.Conv2d(3, 32, kernel_size=3, padding=1)self.bn1 = nn.BatchNorm2d(32)self.relu1 = nn.ReLU()self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)self.bn2 = nn.BatchNorm2d(64)self.relu2 = nn.ReLU()self.pool2 = nn.MaxPool2d(kernel_size=2)self.conv3 = nn.Conv2d(64, 128, kernel_size=3, padding=1)self.bn3 = nn.BatchNorm2d(128)self.relu3 = nn.ReLU()self.pool3 = nn.MaxPool2d(kernel_size=2)self.fc1 = nn.Linear(128 * 4 * 4, 512)self.dropout = nn.Dropout(p=0.5)self.fc2 = nn.Linear(512, 10)def forward(self, x):x = self.conv1(x)x = self.bn1(x)x = self.relu1(x)x = self.pool1(x)x = self.conv2(x)x = self.bn2(x)x = self.relu2(x)x = self.pool2(x)x = self.conv3(x)x = self.bn3(x)x = self.relu3(x)x = self.pool3(x)x = x.view(-1, 128 * 4 * 4)x = self.fc1(x)x = self.relu3(x)x = self.dropout(x)x = self.fc2(x)return x
训练与TensorBoard记录

CNN模型的训练过程与MLP类似,只是模型结构和数据预处理略有不同。我们仍然可以通过TensorBoard记录训练过程中的各种信息,如损失值、准确率、模型结构、权重分布等。

四、TensorBoard的可视化结果

通过TensorBoard,我们可以直观地查看训练过程中的各种信息。例如:

  • SCALARS选项卡:展示损失值、准确率、学习率等标量数据的变化曲线。

  • IMAGES选项卡:展示原始训练图像、错误预测样本等图像数据。

  • GRAPHS选项卡:展示模型的计算图结构。

  • HISTOGRAMS选项卡:展示权重和梯度的分布直方图。

这些可视化结果不仅帮助我们更好地理解模型的训练过程,还能及时发现训练中的问题并进行调整。

计划-45day内容

@浙大疏锦行

http://www.dtcms.com/wzjs/271190.html

相关文章:

  • 做网站和做软件哪个赚钱品牌设计
  • 烟台市委网站官网个人博客搭建
  • wordpress+游戏插件seo搜索引擎优化案例
  • 东莞网站设计在哪里网络推广代运营公司
  • 亚马逊美国站登录入口市场营销推广方案怎么做
  • 网站建设 前沿文章做网站好的网站建设公司
  • 哪个网站做logo新媒体营销案例
  • 企业网站建设入账企业老板培训课程
  • 网站制作要学哪些独立站seo搜索优化
  • php做不了大型网站吗网址ip地址查询工具
  • 制作b2c网站估价长沙网站到首页排名
  • 如何查询网站日志文件友链交易
  • 国内的优秀网站做网站推广公司
  • 如何使网站能被百度搜到人工在线客服
  • 做网站什么软件深圳最新消息
  • 建立内部网站微信上怎么做广告推广
  • 做网站快速赚钱网站怎样关键词排名优化
  • 什么是网站单页网络热词2023
  • 资料下载网站建设seo优化软件哪个好
  • 网站的域名可以更改吗可以访问境外的浏览器
  • 做菠菜网站广州今日刚刚发生的新闻
  • 政府网站设计有什么要点网站搜索优化官网
  • 成都 网站建设 app 开发代运营哪家比较可靠
  • dede做的网站总被挂马接单平台
  • 下载天马行市民云app广州市口碑seo推广
  • 安装了lnmp怎么做网站百度关键词竞价查询系统
  • 景区网站建设要求网上开店如何推广自己的网店
  • 廊坊哪里做网站搜索引擎技巧
  • 做网站开发的想接私活互联网营销渠道有哪些
  • 网站建设验收总结讲话线在成都网站推广公司